Как использовать ',' в качестве разделителя getline в C++
Вот мой код Когда я использую '\t' в качестве разделителя с набором данных, разделенным \ t, это работает, но когда я использую ',' с набором данных, разделенным ',' это не работает.
void TApp::LoadTree(char * fileName){
ifstream in(fileName);
char starID[200];
double dRa,dDec,dU,dG,dR,dI,dZ;
long w = 0;
TStar * star;
if (SlimTree!=NULL){
if (in.is_open()){
cout << "\nLoading objects ";
while(in.getline(starID, 200, ',')){
in >> dRa;
in >> dDec;
in >> dU;
in >> dG;
in >> dR;
in >> dI;
in >> dZ;
in.ignore();
star = new TStar(starID, dRa, dDec, dU, dG, dR, dI, dZ);
SlimTree->Add(star);
delete star;
w++;
if (w % 10 == 0){
cout << '.';
}//end if*/
}//end while
Файл данных, который я пытаюсь прочитать, выглядит следующим образом:
1237645876878180399,15.2062613727499, -1,02188584631684,-9999,-9999,-9999,-9999,-9999
1 ответ
Я предполагаю, что у вас есть файл значений, разделенных запятыми (т.е. CSV), где запятая разделяет все поля.
Тогда ваш код не будет работать, потому что оператор ввода >>
не знаю ничего ни о каком другом разделителе, кроме пробела.
Он работает с вкладками (или другими пробелами) в качестве разделителя, потому что >>
оператор пропускает начальные пробелы и также прекращает чтение в пробелах.
Для файлов CSV я обычно рекомендую вам найти библиотеку, которая поможет вам читать и анализировать их, потому что файлы CSV обманчиво просты, но на самом деле могут содержать множество особых и угловых случаев, которые делают чтение их нетривиальным.
Если вы все еще хотите попытаться разобрать их самостоятельно, я настоятельно рекомендую вам сначала прочитать полные строки и попытаться разобрать каждую строку отдельно. Тогда вы должны помнить, чтобы прочитать разделитель между каждым полем.