Разбор файла в c # - PullRequest
       10

Разбор файла в c #

0 голосов
/ 16 ноября 2018

У меня есть файл tnsnames.ora, который содержит более 50 псевдонимов.Ниже приведен пример содержимого.

В настоящее время я использую приведенный ниже код для получения псевдонимов из tns;

tnsnamesreadercustom tsc = new tnsnamesreadercustom();
uceTNS.DataSource = tsc.LoadTNSNames(FilePath);

И я успешно разбираю эти псевдонимы tnsnames в выпадающий список;

NAME1
NAME2
NAME3

Но я не смог завершить последний шаг, который является:

Пользователь выбирает вышеуказанные псевдонимы, например, NAME1, и он должен получить подробную информацию в окне сообщения, как;

HOST:name1.local.com
PORT:1521
SERVICE_NAME:nameone
SID=null

Вот пример tnsnames.ora;

NAME1=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=name1.local.com)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=nameone)
    )
  )

NAME2= 
  (DESCRIPTION= 
    (ADDRESS= 
      (PROTOCOL=TCP) 
      (HOST=172.31.60.227) 
      (PORT=1531) 
    ) 
    (CONNECT_DATA= 
      (SERVER=dedicated) 
      (SID=nametwo) 
    ) 
  ) 

NAME3= 
  (DESCRIPTION= 
    (ADDRESS= 
      (PROTOCOL=TCP) 
      (HOST=172.31.70.174) 
      (PORT=1521) 
    ) 
    (CONNECT_DATA= 
      (SERVER=dedicated) 
      (SERVICE_NAME=namethree) 
    ) 
  )

Вот пример tnsnamesreadercustom;

   class tnsnamesreadercustom
    {
        public List<string> LoadTNSNames(string strTNSNAMESORAFilePath)
        {
            List<string> DBNamesCollection = new List<string>();
            string RegExPattern = @"[\n][\s]*[^\(][a-zA-Z0-9_.]+[\s]*=[\s]*\(";

            if (!strTNSNAMESORAFilePath.Equals(""))
            {
                //check out that file does physically exists
                System.IO.FileInfo fiTNS = new System.IO.FileInfo(strTNSNAMESORAFilePath);
                if (fiTNS.Exists)
                {
                    if (fiTNS.Length > 0)
                    {
                        //read tnsnames.ora file
                        int iCount;
                        for (iCount = 0; iCount < Regex.Matches(System.IO.File.ReadAllText(fiTNS.FullName), RegExPattern).Count; iCount++)
                        {
                            DBNamesCollection.Add(Regex.Matches(System.IO.File.ReadAllText(fiTNS.FullName), RegExPattern)[iCount].Value.Trim().Substring(0, Regex.Matches(System.IO.File.ReadAllText(fiTNS.FullName), RegExPattern)[iCount].Value.Replace("=", " ").Trim().IndexOf(" ")).Replace(" ", "").Replace("=", "").Replace(Environment.NewLine, ""));
                        }
                    }
                }
            }
            return DBNamesCollection;
        }
    }
...