使用QStringList中的特定数据填充struct

时间:2016-06-08 13:11:14

标签: qt csv qstring

我有一个csv文件,其中的一些文字如下:

sendLink, 23, VL_name1, 0.5, 0.5
PATH, (device_1, 1, SW1, 10),\
      (SW_2, 23, SW_1, 23),\
      (SW_1, 9, device_2, 1)
PATH, (device_3, 2, SW_12, 10),\
      (SW_12, 23, SW_11, 23),\
      (SW_11, 9, device_2, 2)

sendLink, 24, VL_name2, 0.5, 0.5
PATH, (device_4, 1, SW_09, 24),\
      (SW_01, 9, device_2, 1)
PATH, (device_5, 2, SW_19, 24),\
      (SW_11, 9, device_2, 2)

sendLink, 25, VL_name3, 0.5, 0.5
PATH, (device_7, 1, SW_09, 24),\
      (SW_09, 17, SW_01, 24),\
      (SW_01, 9, device_2, 1)
PATH, (device_8, 2, SW_19, 24),\
      (SW_19, 17, SW_11, 24),\
      (SW_11, 9, device_2, 2)

我正在使用Qt,并已将csv中的所有数据提取到QStringList中,其中QStringList的每个元素都是来自csv的一行。

我已定义了如下结构:

typedef struct{
    QString outputESResource;
    QString inputESResource;
} Path_t;

现在我的目的是扫描QString列表,并且对于以sendLink开头的每一行,我应该读取以PATH开头的下一行,将第二个元素(device_1,device_3)保存到{ {1}}然后查看PATH行之后的行并在此示例中获取前一列(device_2)并将其保存到outputESResource

为此,我在stringList中搜索以PATH开头的行,如下所示:

inputESResource

我不确定这是否是实现此目的的正确方法。有人可以就此提出建议。

1 个答案:

答案 0 :(得分:1)

据我了解...这里有一些伪代码可以帮到你。 我认为你的想法没有任何问题,不确定你是如何从文件中读取的 - 但是没有必要立即使用QString - 通常QIODevice :: readLine返回一个QByteArray,它和QString一样好用于此类事情...

for word in sentencelist:
        print(noduplicateslist.index(word))

注意:未构建或测试 - 没有您的orig可兼容版本。对于你想要对这些信息做什么也有太多的未知数,所以我没有尝试将pathInfo存储在任何地方...

修改

我添加了一个小循环来将PATH行追加到一起并删除空格和'/' - 以及删除'('和')'的相同代码......