簡體   English   中英

知道文本文件中的列數,以空格或制表符分隔

[英]know the number of columns from text file, separated by space or tab

我需要知道帶有浮點數的文本文件中的列數。

我這樣做是為了知道行數:

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的一行:

189.53  58.867  74.254  72.931  80.354

值的數量可以因文件而異,但不能在同一文件上。

每個值在“。”之后都有可變的小數位數。 (點)

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

謝謝

給定您已閱讀的一行,稱為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/algorithm/string.hpp>見以前的帖子在這里

您可以閱讀一行,然后將其拆分並計算元素數量。

或者,您可以讀取一行,然后將其作為數組進行遍歷,並計算空格\\t字符的數量。

如果這三個假設是正確的,則可以很容易地做到這一點:

  1. 定義了dummyLine ,以便您可以在while循環范圍之外訪問它
  2. 文件的最后一行具有相同的制表符/空格分隔格式(原因是while循環后dummyLine包含的內容)
  3. 每行數字之間只有一個制表符/空格

如果所有這些都是正確的,那么在while循環之后,您只需要執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM