문제

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top