2013-12-13 31 views
1

我需要知道浮动文本文件的列数。知道文本文件的列数,用空格或制表符分隔

我做了这样知道的行数:

inFile.open(pathV); 

// checks if file opened 
if(inFile.fail()) { 
    cout << "error loading .txt file for reading" << endl; 
    return; 
} 
// Count the number of lines 
int NUMlines = 0; 
while(inFile.peek() != EOF){ 
    getline(inFile, dummyLine); 
    NUMlines++; 
} 
inFile.close(); 
cout << NUMlines-3 << endl; // The file has 3 lines at the beginning that I don't read 

中的.txt的A线:

189.53 58.867 74.254 72.931 80.354 

值的数量可以从文件中有所不同的文件,但不在同一个文件上。

每个值在“。”后面都有一个可变的小数位数。 (dot)

这些值可以用空格或TAB分隔。

谢谢

回答

2

鉴于您已经阅读一根线,称之为line这个工程:

std::string line("189.53 58.867 74.254 72.931 80.354"); 
std::istringstream iss(line); 
int columns = 0; 
do 
{ 
    std::string sub; 
    iss >> sub; 
    if (sub.length()) 
     ++columns; 
} 
while(iss); 

我不喜欢这个读取整个行,然后重新解析它,但它的作品。

有各种其他方式分割字符串,例如boost的<boost/algorithm/string.hpp>请参阅上一篇文章here

0

您可以阅读一行,然后split it和计数元素数。

或者你可以读取一行,然后遍历它作为一个数组和计数空间\t字符数。

0

你可以做到这一点很容易,如果这三个假设为真:

  1. dummyLine定义,让你拥有while环路范围
  2. 文件的最后一行具有相同的外部访问到它选项卡/空格分隔的格式(因为这就是dummyLinewhile循环后含)
  3. 一个且只有一个选项卡/空间之间的数字出现在每一行

如果这一切都是真的,那么while循环之后你只需要做到这一点:

const int numCollums = std::count(dummyLine.begin(), dummyLine.end(), '\t') + std::count(dummyLine.begin(), dummyLine.end(), ' ') + 1; 
+0

我得到了一个错误: 错误:函数计数(dummyLine.begin(),dummyLine.end (),'\ t')没有在当前范围中定义 您可以指定count()吗? – JMG

+1

在文件的顶部,这个代码在'#include ' –

+0

我正在使用root,我不能使用所有的C++功能,并且出现同样的错误... – JMG

相关问题