2014-09-11 2 views
0

Я пишу программу для чтения данных из текстового файла в следующем формате. Как пропустить прочтение строк, начинающихся со звездочки?Как читать определенные строки из файла?

* Data set 34.6 
* Author: M. S. 
1 3  
6 7  
4 5  
... so on 

Соответствующая часть моего кода в настоящее время выглядит следующим образом .. Она может читать и вставить 2 номера в мой набор в то время, но я получаю ошибки, если есть строки комментариев сверху, начиная с звездочкой. Поэтому я не уверен, как игнорировать эти строки, пока файл читается.

string lin; 
while (getline(if1, lin)) { 
     istringstream is1(lin); 
     int a, b; 
     if (is >> a >> b) { 
      set3.insert({a, b});          
     } 
    } 
+0

* он может читать и вставить 2 номера в моем наборе в то время * Похоже, что вы читаете и вставка 3 ... – scohe001

+0

Короткий ответ является то, что вы не можете не читать их. О том, что вы можете сделать, это прочитать их, проверить, начинаются ли они со звездочки, и если так, просто переходите к следующей строке, не сохраняя их. Если вы собираетесь перечитывать один и тот же файл более одного раза, вы можете создать индекс, показывающий, где начинается каждая строка, и искать начало следующей строки, когда вы найдете звездочку (но вы, вероятно, вряд ли выиграете, сделав так). –

+0

Попробуйте 'if (! Lin.empty() && lin [0]! = '*')'. FYI 'lin [0]' является первым символом 'lin'. – Galik

ответ

1

Вы можете проверить звездочку, прежде чем делать какие-либо больше читать, и если вы найдете его, continue (переход к следующей итерации while):

string lin; 
while (getline(if1, lin)) { 
    if(lin[0] == '*') continue; //Skip this line if it's bad 
    istringstream is1(lin); 
    int a, b; 
    if (is >> a >> b) { 
     set3.insert({a, b});          
    } 
} 
0

Если файл не имеет конкретных (например, каждая строка, начинающаяся со звездочки, имеет фиксированное количество символов), вы не можете пропустить эту строку, так как вы не знаете, сколько символов пропустить. То, что вы, вероятно, должны делать, - читайте файл по строкам, и если строка, которую вы читаете, начинается с пропуски ее прокрутки.

string lin; 
while (getline(if1, lin)) { 
    if(lin.length() == 0 || lin[0] == '*') continue; 
    istringstream is1(lin); 
    int a, b; 
    if (is1 >> a >> b) { 
     set3.insert({a, b});          
    } 
} 
Смежные вопросы