Опять вопрос по теме считывая файла, но по-сложнее!

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Dude
Сообщения: 3
Зарегистрирован: 26 мар 2005, 20:28
Откуда: Казань
Контактная информация:

07 апр 2005, 23:29

вот есть в текстовом файле содержится таблица, столбцы разделены символами табуляции. Первый столбец содержит цифры, т.е. значения типа integer, остальные любые, например char.... В принципе вообще нужно считать и записать по массивам. Вопрос как записать нужные значения в нужные массивы???
Tima
Сообщения: 43
Зарегистрирован: 23 сен 2004, 11:17
Откуда: Харьков
Контактная информация:

08 апр 2005, 11:34

Вообще то достаточно не удобный способ хранения инфы. Что по другому совсем никак?
Если никак - то придумывай свой парсер, типа
получитьСтроку()
распарситьСтроку()
первое значение если тип int в массив int
все последующие в массивы типа char
Проделать это в цикле
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

08 апр 2005, 13:27

Лучше конечно разделять столбцы не табуляцией, а какими-то видимыми символами, типа точки с запятой (;), тогда меньше будет путаницы с разделителями, особенно если кто-то будет руками редактировать этот файл.
Если тебе заранее известен порядок записи данных в строке и их формат (числа целые, вещественные, строки...), то сначала определяется структура, поля которой будут соответствовать данным из строки текста...

Например, телефонный справочник:

7801798;ИВАНОВ В.П.;ул. КРАСНАЯ ПРЕСНЯ, д.14, кв.8
9126478;СИДОРОВ А.В.;ул. ПРОФСОЮЗНАЯ, д.36, кв.17
. . . . . .

Создаёшь для него структуру типа

Код: Выделить всё

typedef struct tagRECORD
{
   long Number;
   char Owner[80];
   char Address[128];
} RECORD;
Далее пишешь функцию, которая из строки получает данные и инициализирует ими поля структуры. Здесь может помочь класс потока istrstream:

Код: Выделить всё

#include <strstrea.h>

void StringToStruct(char *pszText, RECORD *lpRec)
{
   char Buff[128];
   istrstream is(pszText);
   is.getline(Buff, 15, ';');
   lpRec->Number = atol(Buff);
   is.getline(Buff, 80, ';');
   strcpy(lpRec->Owner, Buff);
   is.getline(Buff, 127);
   strcpy(lpRec->Address, Buff);
}
Ну а дальше уже организуешь построчное чтение текстового файла, вызываешь функцию StringToStruct(), передаёшь ей строку текста и указатель на структуру, которая будет принимать готовые данные...
Dude
Сообщения: 3
Зарегистрирован: 26 мар 2005, 20:28
Откуда: Казань
Контактная информация:

13 апр 2005, 19:42

Спасибо большое, пробую! Вопросы будут напишу ок?!
Styopa
Сообщения: 40
Зарегистрирован: 30 сен 2004, 19:22
Откуда: Севастополь
Контактная информация:

20 май 2005, 21:40

Вопросы будут напишу ок?!
Мы все здесь для этого собрались, не так ли? :)
В жизни программиста всего три плюса. Из них два - в Си++, а третий - крест на его могиле.
Ответить