powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Еще раз про txt-dbf
19 сообщений из 19, страница 1 из 1
Еще раз про txt-dbf
    #33305502
Denver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как программно перенести данные из текстового файла в dbf? Не прибегая к помощи мастера? Работаю на VFP 5.0.
Примерное содержание текстового файлика:
G444592,1,10011,3,,,,,,,608.59,4.91,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,613.5
G444591,1,5608,3,,,,,,,153.76,1.24,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,155
G444593,1,10152,3,,,,,,,478.26,11.76,02/08/05,002,440008,,,,,,,,,,,,,,,,,,198908,490.02
и т.д.

Заранее благодарен.
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33305529
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почитай

APPEND FROM FileName | ?[FIELDS FieldList] [FOR lExpression]
[[TYPE] [DELIMITED [WITH Delimiter | WITH BLANK | WITH TAB
| WITH CHARACTER Delimiter] | DIF | FW2 | MOD | PDOX | RPD |
SDF | SYLK | WK1 | WK3 | WKS | WR1 | WRK | CSV | XLS | XL5
[SHEET cSheetName] | XL8 [SHEET cSheetName]]] [AS nCodePage]
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33305539
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DenverКак программно перенести данные из текстового файла в dbf? Не прибегая к помощи мастера? Работаю на VFP 5.0.
Примерное содержание текстового файлика:
G444592,1,10011,3,,,,,,,608.59,4.91,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,613.5
G444591,1,5608,3,,,,,,,153.76,1.24,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,155
G444593,1,10152,3,,,,,,,478.26,11.76,02/08/05,002,440008,,,,,,,,,,,,,,,,,,198908,490.02
и т.д.

Заранее благодарен.
Как-как! Написать программу и запустить ее...
Короче:
1. Открыть текстовый файл через fopen
2. Считать одну строку в переменную (при помощи fgets)
3. Распарсить строку на отдельные составляющие (ведь запятая = разделитель полей), которые поместить в соответствующие переменные
4. В dbf файл добавить запись посредством insert into..., где в value(...) будут стоять имена переменных.
5. Повторять п.п. 2-4 до достижения конца текстового файла...
6. Все открытое закрыть :)

Только есть свои "НО":
1. порядок следования данных в текстовом файле должен строго соблюдаться.
2. Вкачать текстовой файл произвольного формата не получится. Надо каждый раз (для каждого нового порядка следования данных) "изобретать велосипед"
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33305561
Фотография SAM-FoxPro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Local ln_Nfile, lcPathToFile ... 
ln_Nfile= FOPEN(lcPathToFile , 10 )  && If so, open read only 
IF ln_Nfile<  0   && Check for error opening file 
   =MESSAGEBOX('Невозможно открыть файл'+' '+lcPathToFile+'!', 16 ) 
ELSE  && If no error, read file 
   IF MESSAGEBOX('Будет обработан файл'+' '+lcPathToFile+'!', 33 ,'Продолжить?')= 1  
      DO  while  !Feof(ln_nfile) 
        lcStr=fgets(ln_nfile) 
        lc1=GETWORDNUM(lcStr, 1 ,',') 
        lc2=GETWORDNUM(lcStr, 2 ,',') 
        lc3=GETWORDNUM(lcStr, 3 ,',') 

и так далее 
       
        INSERT INTO <TableName> (<Field1>,<Field2>,<Field3>, ...) VALUES (lc1,lc2,lc3,...) 
       
      ENDDO       
   ENDIF 
FCLOSE(ln_nfile) 
ENDIF

в пятом нету GETWORDNUM(lcStr,1,',') .
Тогда:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
LOCAL lcStr,lnLenStr, lnPosit,lnCol 
DIMENSION acStr( 99 ) && сколько надо 
STORE '' TO acStr 

lnCol= 1  
lnPosit= 1  
i= 1  

* Естественно, следующая строка принимается из файла аналогично 
* предыдущему примеру 


lcStr='G444592,1,10011,3,,,,,,,608.59,4.91,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,613.5' 

lnLenStr=LEN(lcStr) 

DO while i < lnLenStr 
   IF SUBSTR(lcStr,i, 1 )==',' 
      acStr(lnCol)=SUBSTR(lcStr,lnPosit,i-lnPosit) 
      lnCol=lnCol+ 1  
      i=i+ 1  
      lnPosit=i 
   ELSE 
      i=i+ 1  
   ENDIF 
ENDDO     
acStr(lnCol)=SUBSTR(lcStr,lnPosit,i-lnPosit+ 1 )

Т.о. в массиве будут соответствующие фрагменты строки
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33305757
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на функцию
возвращает из строки с разделителем-запятая элементы
********************************************

para номер_элемента,символьная_строка
retu_строка=''
do case
case номер_элемента=1
retu subs(символьная_строка,1,at(',',символьная_строка)-1)
othe
начальная_позиция=at(',',символьная_строка,номер_элемента-1)
конечная_позиция =at(',',символьная_строка,номер_элемента)
do case
case начальная_позиция=0
retu ''
case конечная_позиция=0
on erro true=.f.
retu_строка=subs(символьная_строка,начальная_позиция+1)
on erro
if empt(retu_строка)
retu_строка=''
endif
retu retu_строка
othe
on erro true=.f.
retu_строка=subs(символьная_строка,начальная_позиция+1,конечная_позиция-начальная_позиция-1)
on erro
if empt(retu_строка)
retu_строка=''
endif
retu retu_строка
endcase
endcase


как страшно жить,
посмотрю иногда , ну как навернут- блин бедная фокса


если аппенд не хочешь,
никого не слушай
делай так

считай filetostr
и затем в цикле построчно функцией выдергивай
и в таблицу поченное реплейсь
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306001
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100на функцию
возвращает из строки с разделителем-запятая элементы
********************************************
как страшно жить,
посмотрю иногда , ну как навернут- блин бедная фокса

Действительно, настолько усложнить себе жизнь, это надо постараться


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
* Функция возвращает фрагмент из строки вида "1,2,3,4" по его порядковому номеру
* Под фрагментом, понимается часть строки обрамленная запятыми

FUNCTION Elements(tcString, tcNum)
LOCAL lcSeparator
lcSeparator = ","

LOCAL lcString, lnStartPos, lnEndPos
lcString   = m.lcSeparator+m.tcString+m.lcSeparator
lnStartPos = AT(m.lcSeparator,m.lcString,m.tcNum)
lnEndPos   = AT(m.lcSeparator,m.lcString,m.tcNum+ 1 )

RETURN SubStr(m.lcString,m.lnStartPos+ 1 ,m.lnEndPos-m.lnStartPos- 1 )

Пример вызова

Код: plaintext
?Elements("Первый фрагмент,Второй фрагмент,,,Пятый фрагмент", 5 )

При желании, можно добавить в качестве третьего параметра собственно символ-разделитель (значение lcSeparator)
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306016
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я про аппенд
там все есть нафиг файл дергать
у него все с разделителями - лучше не бывает
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306038
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex11100я про аппенд
там все есть нафиг файл дергать
у него все с разделителями - лучше не бывает
Да, самое разумное и простое - это APPEND FROM. Одной командой закачивается вся информация одновременно распределясь по полям.

PS: функция FileToStr() появилась только в VFP6. В 5 ее не было (точнее, надо покопаться в FoxTools.fll, кажется, там уже была). Нужны другие способы получения строки (Memo-поле, FGETS())
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306052
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DenverКак программно перенести данные из текстового файла в dbf? Не прибегая к помощи мастера? Работаю на VFP 5.0.
Примерное содержание текстового файлика:
G444592,1,10011,3,,,,,,,608.59,4.91,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,613.5
G444591,1,5608,3,,,,,,,153.76,1.24,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,155
G444593,1,10152,3,,,,,,,478.26,11.76,02/08/05,002,440008,,,,,,,,,,,,,,,,,,198908,490.02
и т.д.
Заранее благодарен.

Как советовал alex11100 почитай и обрати внимание на
DELIMITED
Указывает, что файл-источник, из которого записи добавляются в текущую таблицу Visual FoxPro, является файлом с разделителями. Файл с разделителями - это текстовый ASCII-файл, в котором каждая запись заканчивается возвратом каретки и переводом строки. По умолчанию предполагается, что значения полей отделены друг от друга запятыми и символьные значения заключены в кавычки. Например:
"Smith", 9999999, "TELEPHONE"
А после этого и применяй эту команду.
Или
1. Либо структуру таблицы в которую нужно записать приложи в топик.
2. Читай и внедряй другие советы.
3. Вообще надо как-то самому пробовать изобретать что-то. Это гораздо полезнее, если хочешь научиться программировать.
А может это у тебя разовая работа, и больше никогда не вернешься к FOXу???
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306132
Denver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex11100почитай

APPEND FROM FileName | ?[FIELDS FieldList] [FOR lExpression]
[[TYPE] [DELIMITED [WITH Delimiter | WITH BLANK | WITH TAB
| WITH CHARACTER Delimiter] | DIF | FW2 | MOD | PDOX | RPD |
SDF | SYLK | WK1 | WK3 | WKS | WR1 | WRK | CSV | XLS | XL5
[SHEET cSheetName] | XL8 [SHEET cSheetName]]] [AS nCodePage]

DIF | FW2 | MOD | PDOX | RPD |
SDF | SYLK | WK1 | WK3 | WKS | WR1 | WRK | CSV | XLS | XL5
Это как я понимаю типы файлов. А txt к какому из них относится?
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306157
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SDF

Задайте SDF, чтобы импортировать данные из файла System Data Format. Файл SDF ѕ это текстовый ASCII-файл, в котором записи имеют фиксированную длину и заканчиваются возвратом каретки и переводом строки. Предполагается, что файлы SDF имеют расширение имени .TXT.
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306167
Denver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир СА DenverКак программно перенести данные из текстового файла в dbf? Не прибегая к помощи мастера? Работаю на VFP 5.0.
Примерное содержание текстового файлика:
G444592,1,10011,3,,,,,,,608.59,4.91,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,613.5
G444591,1,5608,3,,,,,,,153.76,1.24,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,155
G444593,1,10152,3,,,,,,,478.26,11.76,02/08/05,002,440008,,,,,,,,,,,,,,,,,,198908,490.02
и т.д.
Заранее благодарен.

Как советовал alex11100 почитай и обрати внимание на
DELIMITED
Указывает, что файл-источник, из которого записи добавляются в текущую таблицу Visual FoxPro, является файлом с разделителями. Файл с разделителями - это текстовый ASCII-файл, в котором каждая запись заканчивается возвратом каретки и переводом строки. По умолчанию предполагается, что значения полей отделены друг от друга запятыми и символьные значения заключены в кавычки. Например:
"Smith", 9999999, "TELEPHONE"
А после этого и применяй эту команду.
Или
1. Либо структуру таблицы в которую нужно записать приложи в топик.
2. Читай и внедряй другие советы.
3. Вообще надо как-то самому пробовать изобретать что-то. Это гораздо полезнее, если хочешь научиться программировать.
А может это у тебя разовая работа, и больше никогда не вернешься к FOXу???

Да нет работа не разовая и очень интересная, просто с фоксом знаком 2 месяца всего.

А вот насчет структуры... мне необходимо просто перегнать txt в dbf , поэтому структура будет как и сам текстовый файлик.
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306170
Denver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PaulWist SDF

Задайте SDF, чтобы импортировать данные из файла System Data Format. Файл SDF ѕ это текстовый ASCII-файл, в котором записи имеют фиксированную длину и заканчиваются возвратом каретки и переводом строки. Предполагается, что файлы SDF имеют расширение имени .TXT.

Огромное спасибо за подсказку.
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306174
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DenverА txt к какому из них относится?
Он по другому задается. Факт наличия ключевого слова DELIMITED и является тем признаком, который указывает, что информация берется из текстового файла.

В твоем случае надо дать команду

Код: plaintext
1.
2.
SELECT MyTable
APPEND FROM MyFile.txt DELIMITED

Разумеется, поля таблицы, в которую пойдет закачка должны быть физически расположены в том порядке, как предполагаемые значения в тектовом файле.

Конвертация типов данных произойдет автоматически, если это возможно. Если это по каким-либо причинам конвертация в нужный тип данных невозможна, то будет сформировано пустое или нулевое значение для данного поля.
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306235
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну слава...,
пришли к консенсусу ,
шалю я сегодня
вчера хенеси попил старого
пока не ругнешься - не пониме
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306276
Станислав C.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denver PaulWist SDF

Задайте SDF, чтобы импортировать данные из файла System Data Format. Файл SDF ѕ это текстовый ASCII-файл, в котором записи имеют фиксированную длину и заканчиваются возвратом каретки и переводом строки. Предполагается, что файлы SDF имеют расширение имени .TXT.

Огромное спасибо за подсказку.
Только надо быть крайне внимательным! В приведенном фрагменте файла
автор
G444592,1,10011,3,,,,,,,608.59,4.91,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,613.5
G444591,1,5608,3,,,,,,,153.76,1.24,02/08/05,001,05211,,,,,,,,,,,,,,,,,,198907,155
G444593,1,10152,3,,,,,,,478.26,11.76,02/08/05,002,440008,,,,,,,,,,,,,,,,,,198908,490.02

этого (одинаковой длины строк) не наблюдается... Хотя, могут быть пробелы на концах...
Поэтому надежнее - все-таки закачка "под контролем" с выделением отдельных значений из строки, явными преобразованиями и т.д...
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306295
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi, Denver !
Т.к. ты не прислал структуру таблицы, пришлось сделать самому:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Structure for table: WR_01.DBF
Number of data records:        3        
Date of last update:           05 / 10 / 05 
 Code Page:                    1251     
   Field Name Type       Width
  1  P1         Character   10 
  2  P2         Numeric     10 
  3  P3         Numeric     10 
  4  P4         Numeric     10 
  5  P5         Character   1  
  6  P6         Character   1  
  7  P7         Character   1  
  8  P8         Character   1  
  9  P9         Character   1  
 10  P10        Character   1  
 11  P11        Numeric     12 . 2 
 12  P12        Numeric     12 . 2 
 13  P13        Date        8  
 14  P14        Character   3  
 15  P15        Character   10 
 16  P16        Character   1  
 17  P17        Character   1  
 18  P18        Character   1  
 19  P19        Character   1  
 20  P20        Character   1  
 21  P21        Character   1  
 22  P22        Character   1  
 23  P23        Character   1  
 24  P24        Character   1  
 25  P25        Character   1  
 26  P26        Character   1  
 27  P27        Character   1  
 28  P28        Character   1  
 29  P29        Character   1  
 30  P30        Character   1  
 31  P31        Character   1  
 32  P32        Character   1  
 33  P33        Numeric     10 
 34  P34        Numeric     12 . 2 
** Total **    131 
Теперь команда:
Код: plaintext
APPEND FROM data.txt TYPE DELIMITED
Где содержимое файла data.txt:
Код: plaintext
1.
2.
G444592, 1 , 10011 , 3 ,,,,,,, 608 . 59 , 4 . 91 , 02 / 08 / 05 , 001 , 05211 ,,,,,,,,,,,,,,,,,, 198907 , 613 . 5 
G444591, 1 , 5608 , 3 ,,,,,,, 153 . 76 , 1 . 24 , 02 / 08 / 05 , 001 , 05211 ,,,,,,,,,,,,,,,,,, 198907 , 155 
G444593, 1 , 10152 , 3 ,,,,,,, 478 . 26 , 11 . 76 , 02 / 08 / 05 , 002 , 440008 ,,,,,,,,,,,,,,,,,, 198908 , 490 . 02 
И вот результат:
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306296
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
длина - побарабану,
главное колич-во запятых в строке
тяни аппендом, затем меняй структуру его и сливай куда нужно
...
Рейтинг: 0 / 0
Еще раз про txt-dbf
    #33306465
Denver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир САHi, Denver !
Т.к. ты не прислал структуру таблицы, пришлось сделать самому:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Structure for table: WR_01.DBF
Number of data records:        3        
Date of last update:           05 / 10 / 05 
 Code Page:                    1251     
   Field Name Type       Width
  1  P1         Character   10 
  2  P2         Numeric     10 
  3  P3         Numeric     10 
  4  P4         Numeric     10 
  5  P5         Character   1  
  6  P6         Character   1  
  7  P7         Character   1  
  8  P8         Character   1  
  9  P9         Character   1  
 10  P10        Character   1  
 11  P11        Numeric     12 . 2 
 12  P12        Numeric     12 . 2 
 13  P13        Date        8  
 14  P14        Character   3  
 15  P15        Character   10 
 16  P16        Character   1  
 17  P17        Character   1  
 18  P18        Character   1  
 19  P19        Character   1  
 20  P20        Character   1  
 21  P21        Character   1  
 22  P22        Character   1  
 23  P23        Character   1  
 24  P24        Character   1  
 25  P25        Character   1  
 26  P26        Character   1  
 27  P27        Character   1  
 28  P28        Character   1  
 29  P29        Character   1  
 30  P30        Character   1  
 31  P31        Character   1  
 32  P32        Character   1  
 33  P33        Numeric     10 
 34  P34        Numeric     12 . 2 
** Total **    131 
Теперь команда:
Код: plaintext
APPEND FROM data.txt TYPE DELIMITED
Где содержимое файла data.txt:
Код: plaintext
1.
2.
G444592, 1 , 10011 , 3 ,,,,,,, 608 . 59 , 4 . 91 , 02 / 08 / 05 , 001 , 05211 ,,,,,,,,,,,,,,,,,, 198907 , 613 . 5 
G444591, 1 , 5608 , 3 ,,,,,,, 153 . 76 , 1 . 24 , 02 / 08 / 05 , 001 , 05211 ,,,,,,,,,,,,,,,,,, 198907 , 155 
G444593, 1 , 10152 , 3 ,,,,,,, 478 . 26 , 11 . 76 , 02 / 08 / 05 , 002 , 440008 ,,,,,,,,,,,,,,,,,, 198908 , 490 . 02 
И вот результат:

Вот спасибо огромное :)
Все прекрасно работает!
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Еще раз про txt-dbf
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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