2 / 2 / 1
Регистрация: 23.10.2012
Сообщений: 66
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Текстовый файл, в котором значения разделены точкой с запятой. Нужен ли regex?30.01.2013, 17:39. Показов 2654. Ответов 15
Метки нет (Все метки)
Привет)
В общем, вопрос в том, как сделать правильнее и "красивее", что ли, такое вот задание. Есть файлик, в котором заданное кол-во значений разделено точкой с запятой. По типу: value1;value2;value3;value4;value5; (et cetera) Мне нравится вариант с регексом.
Ну не писать же такое вот выражение:
";вот такая длинная строка с пробелами;". В общем, как правильней, или, точнее, грамотней было бы это сделать? Добавлено через 8 минут ЗЫ Выражение с регекспом можно и подсократить, конечно:
Но все равно, чувствую, не нужен тут regex, можно сильно проще ))
0
|
30.01.2013, 17:39 | |
Ответы с готовыми решениями:
15
Слова в тексте разделены точкой с запятой. Определить сколько слов, заканчиваются буквой а. Как правильно считать матрицу из текстовый файла, если числа разделены запятой Ввести предложение, слова в котором разделены пробелами и запятыми. После каждой запятой поставить пробел, если его там нет Дан многострочный текстовый файл слова разделены пробелами, сформировать новый файл с палиндромом строк первого файла |
2 / 2 / 1
Регистрация: 23.10.2012
Сообщений: 66
|
|
30.01.2013, 17:43 [ТС] | 3 |
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||
30.01.2013, 18:06 | 5 | |||||
Excogit8er, может как-нибудь так?
Добавлено через 1 минуту Так то со split попроще будет, пожалуй)
0
|
2 / 2 / 1
Регистрация: 23.10.2012
Сообщений: 66
|
||||||
30.01.2013, 18:20 [ТС] | 6 | |||||
А при таком подходе строки не перепутаются? )
Так-то все ясно: while(std::getline(filename, str, '\n')) И каждая строка потом парсится. А так... Добавлено через 2 минуты Ну, кстати, вариант. Со сплит я уже посмотрел примеры:
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||
30.01.2013, 18:32 | 7 | |||||
Excogit8er, v[2], v[18]?
Добавлено через 2 минуты Собственно
0
|
2 / 2 / 1
Регистрация: 23.10.2012
Сообщений: 66
|
||||||
30.01.2013, 18:43 [ТС] | 8 | |||||
Ну это намного проще, спасибо ) Проверил только что:
"c:\program files\microsoft visual studio 10.0\vc\include\xutility(2227): warning C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' 1> c:\program files\microsoft visual studio 10.0\vc\include\xutility(2212) : see declaration of 'std::_Copy_impl' 1> c:\program files\boost\boost_1_51\boost\algorithm\string\detail\classification.hpp(102) : see reference to function template instantiation '_OutIt std::copy<const char*,char*>(_InIt,_InIt,_OutIt)' being compiled 1> with 1> [ 1> _OutIt=char *, 1> _InIt=const char * 1> ] 1> c:\program files\boost\boost_1_51\boost\algorithm\string\classification.hpp(206) : see reference to function template instantiation 'boost::algorithm::detail::is_any_ofF<CharT>::is_any_ofF<boost::iterator_range<I teratorT>>(const RangeT &)' being compiled 1> with 1> [ 1> CharT=char, 1> IteratorT=const char *, 1> RangeT=boost::iterator_range<const char *> 1> ] 1> c:\users\documents\visual studio 2010\projects\xml2roadnet\xml2roadnet\xml2roadnet.cpp(91) : see reference to function template instantiation 'boost::algorithm::detail::is_any_ofF<CharT> boost::algorithm::is_any_of<const char[2]>(RangeT (&))' being compiled 1> with 1> [ 1> CharT=char, 1> RangeT=const char [2] 1> ]" А сама программка "валится" с ошибкой: "Expression: vector subscript out of range"
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
30.01.2013, 18:55 | 10 |
Студии не нравятся алгоритмы из std? )
Очевидно в строке не было 19 значений, соответственно и в tokens тоже.
0
|
2 / 2 / 1
Регистрация: 23.10.2012
Сообщений: 66
|
||||||
30.01.2013, 19:03 [ТС] | 11 | |||||
Я просто не понял, как строки различать при таком считывании?
Считать количество точек с запятой? А если в какой-то строке будет лишняя, скажем? Ну, т.е.
Ну, boost::split вроде бы не std )) Но, блин, я VS только недавно начал пользоваться и уже понимаю, почему все плюются)
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
30.01.2013, 19:08 | 12 |
Я про
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
30.01.2013, 19:16 | 13 |
"ifstream" это не обязательно файл, а лишь пример. Любой наследник istream'а может его заменить. Если у нас есть несколько строк в файле, то есть istringstream и тот же алгоритм.
Научись смотреть на вопрос в общем, а не упираться лбом в стенку.
0
|
2 / 2 / 1
Регистрация: 23.10.2012
Сообщений: 66
|
|
30.01.2013, 19:16 [ТС] | 14 |
Да, не заметил) Похоже, что не нравятся...
на второй все заваливается. Но там пустые значения, т.е. просто две точки с запятой подряд.
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
30.01.2013, 19:19 | 15 |
0
|
2 / 2 / 1
Регистрация: 23.10.2012
Сообщений: 66
|
||||||
31.01.2013, 11:20 [ТС] | 16 | |||||
)) Все равно я не понял - если в массиве (vector<string>) строк одно из значений оказалось пустым, то это типа exception?
Спасибо всем. Завтра попробую оба варианта (поток и boost::split) Добавлено через 15 часов 40 минут Ну, в общем, как-то так:
Vourhey Ты был прав, все элементарно) Thanx
0
|
31.01.2013, 11:20 | |
31.01.2013, 11:20 | |
Помогаю со студенческими работами здесь
16
Записать значение Double в файл не с запятой, а с точкой Создать файл, в котором фамилии будут записаны в одну строку и разделены запятыми Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |