WinMain » 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(), передаёшь ей строку текста и указатель на структуру, которая будет принимать готовые данные...
Лучше конечно разделять столбцы не табуляцией, а какими-то видимыми символами, типа точки с запятой (;), тогда меньше будет путаницы с разделителями, особенно если кто-то будет руками редактировать этот файл.
Если тебе заранее известен порядок записи данных в строке и их формат (числа целые, вещественные, строки...), то сначала определяется структура, поля которой будут соответствовать данным из строки текста...
Например, телефонный справочник:
7801798;ИВАНОВ В.П.;ул. КРАСНАЯ ПРЕСНЯ, д.14, кв.8
9126478;СИДОРОВ А.В.;ул. ПРОФСОЮЗНАЯ, д.36, кв.17
. . . . . .
Создаёшь для него структуру типа
[code]
typedef struct tagRECORD
{
long Number;
char Owner[80];
char Address[128];
} RECORD;
[/code]
Далее пишешь функцию, которая из строки получает данные и инициализирует ими поля структуры. Здесь может помочь класс потока istrstream:
[code]
#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);
}
[/code]
Ну а дальше уже организуешь построчное чтение текстового файла, вызываешь функцию StringToStruct(), передаёшь ей строку текста и указатель на структуру, которая будет принимать готовые данные...