使用Swift

时间:2016-02-27 22:34:00

标签: swift cocoa terminal nstask

我设法从OSX应用程序执行终端命令,但问题是数据已制成表格。所以我很想知道是否有人知道如何将其解析为某些数据结构,从中可以获得特定行和列中的单个值。我面临的另一个问题是在列表数据之前有文本,我认为我需要跳过它,所以我可以抓住价值(我不知道)。

以下是数据示例。

this is very special output and we are proud of it.
0x0032   099   099   000
0x0032   099   099   000
0x0013   099   099   000
0x0013   122   100   010
0x0032   100   100   010
0x0032   100   100   010
0x0013   100   100   010
0x0032   100   100   000

所以例如我需要得到值:122,它是从左到右的第4行第2列。我如何使用Swift代码完成此操作。

请帮忙。

1 个答案:

答案 0 :(得分:1)

我认为正确的答案是实际知道你的预期输出,然后解析你想要保留的东西(正则表达式等等,以找到符合你想要的行和#34;我可能有一行初始输出我可以丢弃。然后我总是有4列,用3个空格分隔,其中X位置的数据看起来像\ d {3}")。这可能会更好,因此您可以处理各种情况并解决意外结果。

但是 - 你也可以通过随意说:

来做一种不好的近似
  • 我有一个回车符,表示"行"
  • 我有三个空格表示"列"
  • "实"数据总是具有相同的列数
  • 我们不知道会有多少列,但我们会假设我们会找到" max"然后那将定义我们的号码(EX:"真实数据"在这个例子中有4列,而"垃圾"数据有一个)
  • 丢弃任何没有匹配列数的行

    让stdOut ="这是非常特殊的输出,我们为此感到自豪。\ n0x0032 099 099 000 \ n0x0032 099 099 000 \ n0x0013 099 099 000 \ n0x0013 122 100 010 \ n0x0032 100 100 010 \ n0x0032 100 100 010 \ n0x0013 100 100 010 \ n0x0032 100 100 000"

    var rowsAndCols:[[String]] = [[]]

    让rowDelimiter =" \ n" //通过回车分割行 让colDelimiter =" " // cols被3个空格分割

    let rows = stdOut.componentsSeparatedByString(rowDelimiter)

    表示行{   let cols = row.componentsSeparatedByString(colDelimiter)   rowsAndCols.append(COLS) }

    //计算列数并获得最大值 let maxCols = rowsAndCols.map({$ 0.count})。maxElement()

    //删除#列低于" max"发现 rowsAndCols = rowsAndCols.filter({$ 0.count == maxCols})

    //显示我们的整个输出 打印(rowsAndCols)

    让someVal = rowsAndCols [0] [0] 打印(someVal)