![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Moby |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 6.10.2008 Репутация: нет Всего: нет |
Задача: Есть два файла один текстовой и один формата xml. В каждом хранится много информации в основном численной. Что мне с ними делать надо будет не столь важно, а важно получить внутреннее представление этих фалов, ну там в массив все загнать или еще что нибудь.
Для начала вот как выглядит текстовой файл в формате csv. xx,xxxxxxxxxxxxxxx;xx,xxxxxxxxxxxxxxx;dd.mm.yyyy hh:mm:ss где x = 0...9, то есть любое число, а дальше это дата и время. И само собой таких записей много, то есть xx,xxxxxxxxxxxxxxx;xx,xxxxxxxxxxxxxxx;dd.mm.yyyy hh:mm:ss xx,xxxxxxxxxxxxxxx;xx,xxxxxxxxxxxxxxx;dd.mm.yyyy hh:mm:ss . . . . . . . xx,xxxxxxxxxxxxxxx;xx,xxxxxxxxxxxxxxx;dd.mm.yyyy hh:mm:ss Вопрос: Как мне лучше представить эти данные? Создать 4х мерный массив? Или есть более удобное представление? И как бы то ни было ведь нужно будет использовать файловый ввод-вывод, желательно С++ а не С. И что именно использовать. Я не прошу Вас о полном ответе, мне хватит и общих наставлений. Ну может быть есть удобные структуры хранения таких данных в STL и может быть очень удобная функция типа fseek() что бы легко отделить дату от первых двух значений. Заранее спасибо. |
|||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
-------------------- ![]() |
|||
|
||||
Moby |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 6.10.2008 Репутация: нет Всего: нет |
Спасибо. Но для меня, учитывая сроки, тяжко разобраться как это использовать, да и хотелось бы самому.
Как мне используя fstream раскидать по массиву вот такой текстовый файл 10;20;30 40;50;60 что бы i[0][0] = 10, i[1][0] = 20..... ifstream in; in.open("test.txt"); а дальше что делать? |
|||
|
||||
djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Вам не кажется, что это руками пишется за две минуты?
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
Moby |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 6.10.2008 Репутация: нет Всего: нет |
Смотря какие руки.
![]() Я никогда не работал с вводом\выводом текстовых файлов и никогда не использовал fstream. Конечно сейчас я читаю, смотрю примеры и постепенно учусь, но если бы кто-то написал хоть что нибудь, то хуже бы не стало. Я же не спрашиваю а как сделать так, что бы консоль не закрывалась. ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Moby, тебе нужна структура, состоящая из 3-х полей:
|
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
bsa, тебе не кажется что использование констроров тут излишне ? Мне кажется что стоит использовать operator<< , нежели конструкторы .. да и нагляднее имхо.
Хотя с другой стороны имея implicit конструктор из строки в данные можно использовать :
Это сообщение отредактировал(а) jonie - 30.8.2010, 19:32 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
ИванМ |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
Если только из трех столбцов состоит файл и i - си-строка, то можно два раза вызвать getline с символом-разделителем ';' и один раз с '\n'. Типа такого:
Если i - int:
Это сообщение отредактировал(а) ИванМ - 30.8.2010, 21:07 |
||||||
|
|||||||
Moby |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 6.10.2008 Репутация: нет Всего: нет |
Спасибо за ответы. Только прочел их, а до этого все таки сидел и сам пытался разобраться. Многое сделано тупо и в лоб. Посмотрите и прокомментируйте, что мне переписать "по человечески".
Использовал два потока. Один что бы посчитать кол-во строк. Зачем? Потому что после вот такого условия
![]() Но самое главное это то, что в текстовом файле лежит значение 55,6685371398926 а в массив попадает урезанная 55.6685. То есть 4-е знака после запятой. Как тут быть? Так же прошу заметить тупой способ борьбы с запятой. Значения в тексте используют разделитель не точку, а запятую. Я сперва беру все значение как стринг и разбиваю уже его на до запятой и после и складываю со знаком точка и только потом перевожу в флоат. Весьма тупо, не правда ли. ![]() А вот код.
Это сообщение отредактировал(а) Moby - 30.8.2010, 22:56 |
||||
|
|||||
ИванМ |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
Вообще ничего не понял. Причем тут подсчет строк и первая строка и как это связано с потоками. В вашем коде ни одного второго потока не нашел.
Хранить в double и при выводе использовать нужные флаги. Пример:
Для таких целей существует локаль ( setlocale(...) ). Чтобы было по-человечески придется переписать весь код. Почитайте, что вам рекомендовали про классы (хотя для такого случая можно и без них). Забудьте про динамические массивы, используйте контейнеры. Тогда вам вообще не придется подсчитывать число строк. Это сообщение отредактировал(а) ИванМ - 30.8.2010, 23:25 |
||||
|
|||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
Moby |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 6.10.2008 Репутация: нет Всего: нет |
Я неправильно обозвал это, я имел ввиду что создал два fstream . Но я так и не понял как можно после подсчета строк таким образом вернуться на первую? jonie, спасибо. Выглядит очень просто, кое что непонятно, но буду разбираться. |
|||
|
||||
ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: 3 Всего: 23 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |