시각적 C# 2008의 Tnsnames.ora를 구문 분석합니다
-
12-09-2019 - |
문제
tnsnames.ora 파일을 사용하여 Tnsnames.ora 파일을 구문 분석하여 tnsnames를 얻기 위해 Visual C# (Visual Studio 2008 Express Edition)을 사용하는 방법은 무엇입니까? 예를 들어, 내 tnsnames.ora 파일에는 포함되어 있습니다
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = shaman)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
BILL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.58)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
이 파일을 구문 분석하여 tnsnames (예 : Orcl, Bill 등)를 얻을 수있는 방법. 이 질문이 너무 분명하게 들리면 저를 용서해주세요. 나는 C#에서 내 손을 배우고 내 손을 시도하고 있습니다.
해결책
우선, 당신은 필요합니다 이 파일의 구문 규칙.
아마 이것에 대한 해킹이있을 것입니다. 그러나 나는 개인적으로 전체 파서와 함께 갈 것입니다. antlr 결합 적절한 문법 (Antlr 문법의 전체 목록 여기에서 찾을 수 있습니다).
다른 팁
public List<string> ReadTextFile(string FP)
{
string inputString;
List<string> List = new List<string>();
try
{
StreamReader streamReader = File.OpenText(FP.Trim()); // FP is the filepath of TNS file
inputString = streamReader.ReadToEnd();
string[] temp = inputString.Split(new string[] {Environment.NewLine},StringSplitOptions.None);
for (int i = 0; i < temp.Length ;i++ )
{
if (temp[i].Trim(' ', '(').Contains("DESCRIPTION"))
{
string DS = temp[i-1].Trim('=', ' ');
List.Add(DS);
}
}
streamReader.Close();
}
catch (Exception EX)
{
}
return List;
}
Sathya가 제공 한 것과 함께 방법을 만듭니다.
StringBuilder strTns = new StringBuilder ();
foreach ( var fileLine in System.IO.File.ReadAllLines(fiTNS.FullName ) )
{
if ( (fileLine.Length > 0
&& fileLine.Trim().Substring(0,1) != "#"
)
&& ( fileLine.Length > 0
&& fileLine.Trim ().Substring (0,1) != "/"
)
)
{
strTns.AppendFormat("{0}{1}", fileLine, Environment.NewLine);
}
}
//TNSNamesValues = System.IO.File.ReadAllText (fiTNS.FullName).ToString ().Replace ("\n", "" ).Replace ("\r", "");
String[] splitSeparator = LoadTNSNames (OracleHomeRegistryKey).ToArray ();
String[] TNS = strTns.ToString().Split (splitSeparator, StringSplitOptions.None);
제휴하지 않습니다 StackOverflow