O.Lena |
Отправлено: 11.11.2004, 08:36 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
Подскажите, пожалуйста! Каким образом можно в базу MS SQL Serverа в таблицу вставить данные их txt файла. Данные в текстовом файле позиционированы: с 1-10 код строки, 11-40 название организации, 41-56 сумма и т.п. |
|
AVC |
Отправлено: 11.11.2004, 09:19 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Можно для этого что-то написать своё
или если работа одноразовая
зачитываем в Excel, сохраняем в dbf, перекачиваем DataPump'ом в базу |
|
O.Lena |
Отправлено: 11.11.2004, 10:50 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
Да получается что надо чтобы происходило постоянное сканирование определенного каталога на наличие txt файла и загрузка данных в базу. Нашла пример, но только со считыванием строки до конца, а мне нужно, чтобы по позициям с 1 по 10-ю в таблицу в поле код платежа, с 11 по 40-ю в поле Организация и с 41-ой по 56-ю в поле сумма. |
|
avc* |
Отправлено: 11.11.2004, 10:57 |
|
Не зарегистрирован
|
Считывайте строку до конца и вырезайте нужные куски в поля и отправляйте серверу |
|
Konstantine |
Отправлено: 11.11.2004, 11:11 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
если файл прямоугольный (в строках ВЕЗДЕ одинак. кол-во символов), то читай через структуру:
CODE | struct
{
char[10] sID;
char[30] sOrg;
char[16] sSum;
char[2] sRet; // для символов 0d 0a;
} |
считуй с файла в структуру, а из неё поля переводи в int и кидай в базу.
|
|
timson |
Отправлено: 11.11.2004, 12:56 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 82
|
to Konstantine:
использование структур не везде приводит к правильному результату:
CODE | struct
{
char[10] sID;
char[30] sOrg;
char[16] sSum;
char[2] sRet; // для символов 0d 0a;
} row;
..
fgets( (char*) &row, sizeof(row), f);
|
то уже поле row.sOrg будет содержать на два первых символа меньше и т.д. по другим полям, т.к. по умолчанию компилятор
выравнивает данные на границу в 4 байта. Т.е. поле row.sOrg начинается в памяти с 12 байта.
поэтому рекомендация: никогда не пишите данные блоком целеком в структуру, если нет 100% уверенности, что в памяти они
совпадают по формату... (или что-то вроде такого)
согласен с avc*:CODE | while(!feof(f))
{
char buf[100] = { 0 };
fgest(buf, 100, f);
char id[11] = { 0 };
char name[31] = { 0 };
char price[17] = { 0 };
sscanf(buf,"%10c%30c%16", id, name, price);
WriteToBD(id, name, price);
}
|
не проверял, так сходу набросал.
Отредактировано timson — 11/11/2004, 14:03
|
|
Konstantine |
Отправлено: 11.11.2004, 14:38 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
QUOTE | выравнивает данные на границу в 4 байта. |
чтоб этого не было есть директивы прекомпилятора (правда не помню какие...) — недавно были
|
|
Boyko |
Отправлено: 11.11.2004, 15:06 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
QUOTE (timson @ 11/11/2004, 12:58) |
... Т.е. поле row.sOrg начинается в памяти с 12 байта.
|
2 timson
Абсолютно не так!
Поле row.sOrg начинается в памяти с 10 байта!!!
QUOTE (timson @ 11/11/2004, 12:58) |
... выравнивает данные на границу в 4 байта
|
Только в начале и в конце структур, перед int и т.д. Никогда перед char[10]!!! |
|
Konstantine |
Отправлено: 11.11.2004, 16:04 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
если чё, то о выравнивании
Тут
|
|
timson |
Отправлено: 11.11.2004, 19:54 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 82
|
QUOTE | Поле row.sOrg начинается в памяти с 10 байта!!! | был не прав, действительно с 10 байта..
QUOTE | Только в начале и в конце структур, перед int и т.д. Никогда перед char[10]!!! | специально разобрался с этим..
смотрел в дизассемблере, выравнивание идет перед полями типов не char, а далее за ним (т.к. ровно и так) идет char[10]
CODE | struct A
{
char sID[5];
int a;
char c[5];
}; | в память ложится так:CODE |
cccc
c...
iiii
cccc
c...
|
sizeof(A) = 20 байт.
|
|
Boyko |
Отправлено: 12.11.2004, 12:18 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
QUOTE (timson @ 11/11/2004, 19:56) | в память ложится так:CODE |
cccc
c...
iiii
cccc
c...
|
sizeof(A) = 20 байт. |
Я так и сказал, перед int и в конце структур! |
|