سؤال

كيف يمكنني تحليل ملف tnsnames.ora باستخدام Visual C # (Visual Studio 2008 Express Edition) للحصول على TNSNames؟ على سبيل المثال، يحتوي ملف 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، فاتورة، إلخ). سامحني إذا كان هذا السؤال يبدو واضحا جدا، أتعلم ويحاول يدي في C #

هل كانت مفيدة؟

المحلول

بادئ ذي بدء، سوف تحتاج قواعد بناء الجملة لهذا الملف.

ربما هناك اختراق لهذا، لكنني سأذهب شخصيا مع محلل كامل، مثل 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