首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Visual C# 2008中解析tnsnames.ora

在Visual C# 2008中解析tnsnames.ora
EN

Stack Overflow用户
提问于 2009-08-07 13:26:14
回答 4查看 7.1K关注 0票数 4

如何使用Visual C# (Visual Studio2008Express edition)解析tnsnames.ora文件以获得tnsname?例如,我的tnsnames.ora文件包含

代码语言:javascript
复制
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#

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-07 06:10:07

首先,您将需要the syntax rules for this file

这可能有一种破解方法,但我个人倾向于使用一个完整的解析器,比如结合了ANTLRthe proper grammar (一个完整的ANTLR语法can be found here列表)。

票数 4
EN

Stack Overflow用户

发布于 2011-11-29 15:30:11

代码语言:javascript
复制
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;

}
票数 1
EN

Stack Overflow用户

发布于 2010-12-27 23:44:34

与Sathya提供的方法一起创建一个方法:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1243022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档