2015-01-22 3 views
0

У меня проблема с fstream на C++. Если я открываю файл, например test.txt, и я хочу прочитать каждую строку, проверяя, является ли первое значение, которое я принимаю, не строка. Если это не строка, то поэтому строка формируется численными значениями. Если я проверю первое, я потерял первое значение, которое мне нужно. Если я хочу вернуться к началу строки, как я могу это сделать? Я пробовал с seekg(*,ios::cur), но я не знаю, сколько позиций я должен вернуться, чтобы вернуться к началу линии. thank youВозврат к началу строки входного файла, C++

ответ

0

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

ifstream fin; 
string text; 

fin.open("test.txt"); 
fin >> text; 

text.size() даст вам длину первого слова, так как оператор >> читает только до первого пустого пространства. Итак, используя эту информацию, вы теперь знаете, сколько символов нужно возвращать.

2

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

#include <fstream> 
#include <string> 

std::ifstream file("file.txt"); 
std::string line; 

while(std::getline(file , line)) 
{ 
    line.substr(0 , 2) // for example the first 2 positions 
    // do your checks 
} 

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

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

0

Вы можете сделать чек перед чтением строки.

ifstream foo("bar.txt"); 

if(isdigit(foo.peek())){ 
    // You're getting a number 
}else{ 
    // You're getting a string 
} 

peek не удаляет символ, чтобы вы могли продолжить, как будто ничего не было прочитано.

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