Как использовать ',' в качестве разделителя getline в c ++ - PullRequest
0 голосов
/ 25 октября 2018

Вот мой код.Когда я использую '\ 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 Ответ

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

My думаю, означает, что у вас есть значения, разделенные запятыми (т.е. CSV) , где запятая разделяет все поля.

Тогда ваш код не будет работать, потому что оператор ввода >> ничего не знает ни о каком другом разделителе, кроме пробела.

Он работает с вкладками (или другими пробелами) в качестве разделителя, потому что>> оператор пропускает начальные пробелы и также прекращает чтение в пробелах.


Для файлов CSV я обычно рекомендую вам найти библиотеку, которая поможет вамчитать и анализировать их, потому что CSV-файлы обманчиво просты, но на самом деле могут содержать множество особых и угловых случаев, что делает чтение их нетривиальным.

Если вы все еще хотите попытаться разобратьсами, тогда я действительно рекомендую вам сначала прочитать полные строки и попытаться разобрать каждую строку отдельно.Затем вы должны запомнить разделитель между каждым полем.

...