2009-08-07 7 views
3

tnsnames.oraファイルをVisual C#(Visual Studio 2008 Express Edition)を使用して解析してtnsnamesを取得する方法はありますか?例えば 、私のtnsnames.oraファイルはVisual C#2008の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で試して学習しています

答えて

3

まず、the syntax rules for this fileが必要になります。

あり、このためのハックはおそらくですが、私は個人的にthe proper grammarと組み合わせるANTLR(ANTLRの完全なリストはcan be found hereを文法)のように、完全なパーサとなるだろう。サティアによって提供されたものと一緒に

+0

感謝を!これは多くの助けになるはずです。 – Sathya

0

、メソッドを作成します。

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); 
+0

LoadTNSNamesとは何ですか?ソースコードはどこですか? – Kiquenet

1
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; 

} 
+0

OPは彼がC#にはかなり新しいと述べた。たぶんいくつかの説明と根拠を追加すると、完全には理解されていないコードのコピー/貼り付けを避けることができます。 – shenles

関連する問題