当前位置:  开发笔记 > 编程语言 > 正文

c ++文件io&按分隔符拆分

如何解决《c++文件io&按分隔符拆分》经验,为你挑选了1个好方法。

我有一个文件,其数据列表如下:

0,       2,    10
10,       8,    10
10,       10,   10
10,       16,   10
15,       10,   16
17,       10,   16

我希望能够输入文件并将其拆分为三个数组,在此过程中修剪所有多余的空格并将每个元素转换为整数.

出于某种原因,我无法在c ++中找到一种简单的方法.我唯一的成功就是将每一行输入到一个数组中,然后重新修整所有空格然后将其拆分.整个过程花了我很多20-30行代码,并且修改另一个分隔符(例如空格)等很难.

这是我希望在C++中使用的python:

f = open('input_hard.dat')
lines =  f.readlines()
f.close()

#declarations
inint, inbase, outbase = [], [], []

#input parsing
for line in lines:
    bits = string.split(line, ',')
    inint.append(int(bits[0].strip()))
    inbase.append(int(bits[1].strip()))
    outbase.append(int(bits[2].strip()))

在python中使用这种方法的难易程度是我首先转向它的原因之一.但是,我现在需要在C++中执行此操作,我不想使用我丑陋的20-30行代码.

任何帮助将不胜感激,谢谢!



1> MattyT..:

在这个例子中没有真正需要使用boost,因为流可以很好地完成这个工作:

int main(int argc, char* argv[])
{
    ifstream file(argv[1]);

    const unsigned maxIgnore = 10;
    const int delim = ',';
    int x,y,z;

    vector vecx, vecy, vecz;

    while (file)
    {
        file >> x;
        file.ignore(maxIgnore, delim);
        file >> y;
        file.ignore(maxIgnore, delim);
        file >> z;

        vecx.push_back(x);
        vecy.push_back(y);
        vecz.push_back(z);
    }
}

虽然如果我打算使用boost我更喜欢tokenizer的简单性来正则表达式... :)

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有