C ++ избавляется от пустых строк - PullRequest
0 голосов
/ 04 октября 2018

Привет, поэтому этот код работал 5 минут назад, чтобы сделать именно то, что мне было нужно.

Данные:

Set Field [G],Sheet Resistivity (Gavg) [ohm/sqr]
0.0000E+0,
0.0000E+0,7.270620E+2
1.0000E-2,
1.0000E-2,7.271280E+2
-1.0000E-2,
-1.0000E-2,
-1.0000E-2,7.271290E+2

И мой код для этого:

#include <iostream>
#include <fstream>

using namespace std;

int main(){

  ifstream ip("/Users/10Exahertz/Documents/Hall Data/Test/data.txt");

  if(!ip.is_open()) std::cout << "ERROR: File Open" << '\n';

  string x;
  string y;

  while(getline(ip,x,',')){
    getline(ip,y,'\n');

   if(y!="")
    std::cout <<x<<","<< y << '\n';

  }
  ip.close();
}

Как я сказал 5 минут назад, это сработало, оно избавилось от строк с пустой строкой y, и все было хорошо.Но затем я вернулся к исходному файлу данных, и он там не работал.Я был сбит с толку, поэтому я поместил исходные данные в data.txt, и теперь они тоже не работают.Я честно запутался, но что было бы лучшим условием в этом цикле if, чтобы это работало.

1 Ответ

0 голосов
/ 04 октября 2018

Звучит так, как будто у вас может появиться пробел. Я бы использовал решение из этого ответа , чтобы обрезать пробел из вашей строки y, чтобы быть уверенным:

#include <iostream>
#include <algorithm> 
#include <cctype>
#include <locale>
#include <fstream>

using namespace std;

// trim from start (in place)
static inline void ltrim(std::string &s) {
    s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](int ch) {
        return !std::isspace(ch);
    }));
}

int main() {
    [...]
    while(getline(ip,x,',')){
        getline(ip,y,'\n');
        ltrim(y);

        if(y!="")
            std::cout <<x<<","<< y << '\n';
    }
}
...