2016-04-13 2 views
-1

Так что у меня есть код, который читается из файла и разделяется запятыми в файле. Однако некоторые вещи в файле часто имеют пробелы после запятых или перед ними, поэтому это вызывает некоторые проблемы при выполнении кода.Чтение из файла, несколько разделителей

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

while(getline(inFile, line)){ 
     stringstream linestream(line); 
     // each field of the inventory file 
     string type; 
     string code; 
     string countRaw; 
     int count; 
     string priceRaw; 
     int price; 
     string other; 
     // 
     if(getline(linestream,type,',') && getline(linestream,code,',') 
     && getline(linestream,countRaw,',')&& getline(linestream,priceRaw,',')){ 
      // optional other 
      getline(linestream,other,','); 
      count = atoi(countRaw.c_str()); 
      price = atoi(priceRaw.c_str()); 
      StockItem *t = factoryFunction(code, count, price, other, type); 
      list.tailAppend(t); 
     } 
    } 
+1

[CSV-файлы] (https://en.wikipedia.org/wiki/Comm-separated_values) на самом деле сложнее разобрать, чем кажется на поверхности, и может иметь много странных угловых шкафов, которые трудно работать. Моя рекомендация заключается в том, что вы пытаетесь найти библиотеку для обработки разбора файлов. –

+0

Непонятно, что вы пытаетесь спросить. Какой результат вы ожидаете и какая именно проблема вы испытываете? –

+0

Я получаю некоторые данные, сохраненные как эти «данные», а другие похожи на эти «данные», а другие похожи на эти «данные», так как вы можете видеть, что я просто хочу избавиться от пробелов @bkVnet – Hidden

ответ

0

подхода лучше для тех, кто рода проблем является состояние машины. Каждый персонаж, который вы получите, должен действовать простым способом. Вы не указываете, нужны ли пробелы между словами, не разделенными запятыми, поэтому, я полагаю, они вам нужны. Я не знаю, что вам нужно делать с двойными пространствами, я полагаю, вам нужно держать вещи такими, какие есть. Итак, начните читать по одному символу за раз, есть две переменные стартовые позиции и предельная позиция. Когда вы начинаете, вы определяете начальную позицию (состояние 1). Если вы обнаружите какой-либо символ, отличный от символа пробела, вы задаете начальную позицию для этого символа, и вы измените свое состояние на (состояние 2). Когда в состоянии 2, когда вы находите символ пробела, вы устанавливаете предельное положение в следующую позицию, чем найденный вами символ. Если вы найдете запятую, вы получите строку, которая начинается с начала старта, и вы снова включаетесь в состояние 1.

Смежные вопросы