2013-04-03 6 views
3

Я попытался посмотреть, что я пытаюсь сделать, но я не могу найти конкретно то, что я пытаюсь сделать. У меня есть текстовый файл с несколькими линиями, которые выглядят следующим образом:C++ - чтение в строках файла, разделенных запятой

12345,12345,12.34,12345,12345 

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

file >> int1 >> int2 >> double1 >> int3 >> int4; 

Но это очень тяжело для меня делать из-за запятой, разделяющей каждое число. Раньше я был в состоянии сделать это, когда было «пространство», но запятая меня отбрасывает. Есть идеи?

+2

Прочитайте файл в 'int', а затем в' char'. – 0x499602D2

+1

Возможный дубликат: http://stackoverflow.com/questions/267427/c-file-io-splitting-by-separator – noisy

+0

Прошу прощения, я видел это, но я думал, что это было другое, потому что я видел пробелы после запятой. – Arubix

ответ

6
char ch; 
file >> int1 >> ch >> int2 >> ch >> dbl >> ch >> int3 >> ch >> int4; 
+0

что делает ch? – Arubix

+0

@Arubix читает в раздражающем '', ​​'' в вашем файле. – gongzhitaao

+1

@gongzhitaao: что может быть любым персонажем ... Это ненадежный. –

4

Возможно, вы захотите попробовать fscanf.

Что-то вроде этого?

fscanf(filepointer, "%d,%d,%f,%d,%d\n", &int1, &int2, &double1, &int3, &int4); 
+0

Я идиот. Так что подождите, я новичок в этом, но поскольку я использую C++, тогда все на C должно работать так же хорошо? – Arubix

+1

@Arubix: Да. Это вопрос дебатов о том, используете ли вы какие-либо функции библиотеки C. По крайней мере, свести к минимуму их использование. Но для ввода-вывода часто они лучше. –

+0

@LightnessRacesinOrbit: Или хуже. Например, scanf должен * никогда * (и никогда не подразумевать почти никогда) использовать с% s. –

0

Более ранние предложения работают хорошо. Однако, если вы можете использовать C++ 11 и нуждаетесь в более надежном решении, я бы предложил библиотеку регулярных выражений C++ 11: http://en.cppreference.com/w/cpp/regex