2012-04-15 3 views
0

Я читаю в из текстового файла, который выглядит вдоль линий:Проверка входящего типа данных из файла

int string string string 
int string string 
int string string string string string 

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

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

Я попытался

int check 
if(check = file1.peek()){//start new group assignment} 

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

Заранее спасибо.

+0

Почему бы не просто проверить для переноса строк? Если следующий символ является символом новой строки, он потребляет его и читает int. В противном случае прочитайте строку. – dtech

ответ

1

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

Так что я бы прочитал файл, по-разному, а затем разделил каждую строку на пробелы.

Сообщите мне, если выше подходит, и тогда мы сможем объяснить, как это сделать.

Ok, так что вы можете использовать GetLine:

while (cin.good()) // reading from standard input until EOF 
{ 
    String line_str; 
    getline(cin, line_str); // get next line from standard input 
    istringstream line(line_str); // put line into string stream 

    if (line.good()) // read from string stream until EOF 
    { 
     int x; 
     line >> x; // read an integer from string stream 

     while (line.good()) // read from string stream until EOF 
     { 
      string s; 
      line >> s; // read strings from string stream 
      /// process s 
     } 
    } 
} 
+0

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

+0

@ user1331900: Хорошо, вышесказанное должно делать то, что вы хотите. –

+0

Не могли бы вы немного прокомментировать код? Я немного не уверен, что именно происходит. Если это помогает, моя функция импорта файла выглядит так: void fileinput (строковый файл данных, карта записей) { \t fstream file1 (файл данных); while (! File1.eof()) {.... – QuantumO

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