Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Текстовый файл в dbf / 14 сообщений из 14, страница 1 из 1
25.11.2004, 05:55
    #32798856
Lena_yan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовый файл в dbf
Здравствуйте!
Помогите с такой проблемой.
Есть текстовый файл. Он содержит данные, которые имеют символ-разделитель ":", также имеются заголовки между данными.
Надо эти данные перенести в таблицу dbf.

Подскажите общую концепцию решения.
Какие функции использовать?
...
Рейтинг: 0 / 0
25.11.2004, 06:16
    #32798861
Текстовый файл в dbf
командой
append from <filename> delimited with character ":"
но, что такое "имеются заголовки между данными" ?
...
Рейтинг: 0 / 0
25.11.2004, 07:49
    #32798889
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовый файл в dbf
Lena_yanЗдравствуйте!
Помогите с такой проблемой.
Есть текстовый файл. Он содержит данные, которые имеют символ-разделитель ":", также имеются заголовки между данными.
Надо эти данные перенести в таблицу dbf.

Подскажите общую концепцию решения.
Какие функции использовать?
Все правильно сказано в предыдущем сообщении. Однако, если есть какие-либо "шероховатости", не позволяющие прямо использовать append from, то лучше использовать низкоуровневый доступ к файлам (fopen,fread,fgets и т.д.).
В этом случае придется почти все "делать руками", зато можно сделать "почти все". Главное, чтобы формат файла строго выдерживался...

Один раз мне пришлось в dbf-ку вносить данные из текстового файла следующего формата:

1-я строка: количество записей в файле
2-я строка: Исходящие характеристики файла (дата формирования, кто формировал, откуда и т.д.)
3-я строка: № заказа
4-я строка и до конца файла: позиции заказа (код, количество), разделенные ":"

И ничего не оставалось делать, кроме как работать через низкоуровневый доступ...
...
Рейтинг: 0 / 0
25.11.2004, 08:27
    #32798923
Lena_yan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовый файл в dbf
Дмитрий Маликов
После append from какой тип будет у полей в таблице. Все будут char?
Но там есть и числа.
А заголовки между данными - это сначала название "Справка такая-то", потом данные в виде таблице разделенные ":". Через n-строк опять "Справка такая-то" и опять данные.

Станислав С
У меня почти такой же формат текстового файла.
1-я строка: Информация о системе, которая сделала этот файл
2-я строка: Кто сделал
3-я строка: Заголовок (Справка о погрузке сухогрузов)
4-я строка: За какой период
5-я строка: Дата формирования
6-я строка: символы (=========)
7-я и 8-я строки: заголовки столбцов
9-я строка: символы (--------)
10-я строка: название порта
11-я строка: название судна
с 12 по n - данные разделенные :
на n+1 - название судна
с n+2 по ...... - опять данные разделенные :
И так несколько справок в одном файле.

Можно поподробней про функции?
Я понимаю так:
1.Надо прочитать строку
2.Разобрать ее
3.Вставить соответствующие данные в соответствующие столбцы
А как организовать переход к следующей строке?
...
Рейтинг: 0 / 0
25.11.2004, 08:32
    #32798928
Текстовый файл в dbf
команда append применяется к уже созданной и открытой в текущей рабочей области таблице
структура таблицы должна соответствовать структуре данных в текстовом файле
...
Рейтинг: 0 / 0
25.11.2004, 08:36
    #32798935
Текстовый файл в dbf
по описанию текстового файла видно, что комманду append применить не получиться, нужно программно разбирать строки, как сказано в сообщении от Станислав C.
...
Рейтинг: 0 / 0
25.11.2004, 08:39
    #32798937
Текстовый файл в dbf
Lena_yanА как организовать переход к следующей строке?
команда чтения из файла fget() как раз и возвращает следующую строку
...
Рейтинг: 0 / 0
25.11.2004, 08:43
    #32798942
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовый файл в dbf
Lena_yan Можно поподробней про функции?
Я понимаю так:
1.Надо прочитать строку
2.Разобрать ее
3.Вставить соответствующие данные в соответствующие столбцы
А как организовать переход к следующей строке?
При низкоуровневом доступе к файлам можно рассматривать файл как одну очень длинную строку. Если Вы помните, что такое бобинные магнитофоны, то можно файл сравнить с лентой на бобине, а указатель на текущую позицию - с магнитной головкой.
При открытии файла при помощи fopen() указатель устанавливается на начало файла. Функции чтения из файла (fread(),fgets()) смещают указатель на считанное число байт. Так что, если Вы считываете строку целиком, то переход на следующую (позиционирование указателя) происходит автоматически. Иначе, необходимо отслеживать появление в считанных данных пары "возврат каретки-перевод строки".
Хотя про работу с этими функциями (fopen,fread,fgets и т.д.) подробно написано в Фоксовом Хелпе, я порекомендовал бы прочитать что-нибудь другое, например Хелп из С++/ДОС (типа Quick C, TC и т.д.) по работе файлами. Там это объяснено, как мне кажется, лучше... Ну, или прочитайте соответствующий раздел в учебниках по С/С++...
...
Рейтинг: 0 / 0
25.11.2004, 09:19
    #32798977
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовый файл в dbf
а так ?
g=fopen('...',2)
for i=1 to 11
s=fget(g)
endfor
do while !eof()
s=fget(g)
if(at(s,':')#0)
s1=substr(s,1,at(s,':')-1)
s2=substr(s,1,at(s,':',2)-1)
....................
insert into t1 (f1,f1) values (s1,val(s2))
endif
enddo
fclose(g)
...
Рейтинг: 0 / 0
25.11.2004, 09:22
    #32798978
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовый файл в dbf
з.ы.
создание таблицы проверка кода на ошибки и обеспечение безопасности при сканировании файла за вами а так код примерно такой
...
Рейтинг: 0 / 0
25.11.2004, 09:27
    #32798987
Lena_yan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовый файл в dbf
спасибо всем за отклики :)
Буду пробовать.

Еще такой вопрос:
У этого файла Кодовая страница - DOS (866)
Как перед открытием файла задать эту кодировку, а то всякие иероглифы получаются?
...
Рейтинг: 0 / 0
25.11.2004, 09:53
    #32799021
Текстовый файл в dbf
Lena_yanЕще такой вопрос:
У этого файла Кодовая страница - DOS (866)
Как перед открытием файла задать эту кодировку, а то всякие иероглифы получаются?
есть такие фунции, как cpconvert() и oemtoansi()
...
Рейтинг: 0 / 0
25.11.2004, 10:03
    #32799041
leaf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовый файл в dbf
.....
s=cpconvert(866,1251,fget(g))
....
...
Рейтинг: 0 / 0
02.12.2004, 18:16
    #32810480
Vaska_N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Текстовый файл в dbf
Если Фокс свежий (7-8-9) то читать строку, полученную FGETS можно по словам
GETWORDCOUNT(lcSlovo,':') - количество слов
GETWORDNUM(lcSlovo,Х,':') - Х нужное слово в строке
или я не в тему :)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Текстовый файл в dbf / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]