【问题标题】:Flat file parsing with java用java解析平面文件
【发布时间】:2012-11-27 09:06:33
【问题描述】:

我想使用 java 将以下 wmi 输出解析为键值对作为键值对。请给我建议.. 我的 WMI 输出包含 2 行多列,第一行是标题,第二行包含数据。我想要正则表达式或任何方法将标头与相应的数据分开作为 hashmap 的键值。

我不知道如何继续......

Caption                  Description              IdentifyingNumber  Name                   

Computer System Product  Computer System Product                     HP xw4600 Workstation                   

解析输出应该是...

键 = 值

Caption = 计算机系统产品

描述 = 计算机系统产品

识别号 =

名称 = HP xw4600 工作站

【问题讨论】:

  • I want to parse below wmi output to hashmap as a key value pair using java. 很好,你为什么不这样做呢?您是否遇到错误?
  • your other question 的答案有什么问题?那你为什么接受它?
  • user714965 ...其他问题的答案很好,适合该问题。上一个问题中的甲酸盐与这个问题不同。我们需要为此使用不同的正则表达式。你能为这个fomate提供一些正则表达式吗?
  • @kumar 不,但我认为你应该尝试自己编写这个正则表达式。如果您有困难,请就此提出问题。这样一来,您将从 SO 中获得更多,而不是让任何人编写您所有的正则表达式。

标签: java parsing wmi


【解决方案1】:

如果您的文件格式始终相同,您可以轻松使用解析器:

FileInputStream fis = new FileInputStream(filename);
InputStreamReader isr = new InputStreamReader(fis);
Reader in = new BufferedReader(isr);
String[] array = new String[2];
for(int i = 0; i < 2; i++)
{
    ((BufferedReader)in).readLine();
}
for(int i = 0; i < array.length; i++)
{
   array[i] = ((BufferedReader)in).readLine();
   if(array[i] == null)
   {
    array[i] = ""; //$NON-NLS-1$
   }
}
in.close();
String[] headers = array[0].split(Pattern.quote("\t")); //$NON-NLS-1$
String[] values = array[1].split(Pattern.quote("\t")); //$NON-NLS-1$

然后运行两个并填充hashmap

【讨论】:

  • 它不分裂...标头和值长度仅为 1。
  • 在调试的时候你能看到这些字符串中使用了哪个分隔符吗?
  • 当我尝试使用 "\\s+" 进行拆分时,标题部分工作正常。但数据部分给出了奇怪的结果
  • i dint get u ...输出来自 wmi。我该如何检查?
  • 如果你使用我的代码,哪些字符在“标题”和“值”中的字符串对象中用作分隔符?
【解决方案2】:

我将 wmi 输出格式化为列表,现在很容易格式化输出。

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 2013-02-22
    • 2012-09-04
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多