Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Програма импорта данных  [new]
sergeyermak
Member

Откуда:
Сообщений: 65
Добрый день уважаемые знатоки!
У меня возникла такая проблема мне надо используя Append или что-то либо другое написать програму на ФоксПро которая бы подбирала текстовый файл(CSV)и импортировала его в ФоксПро, и по возможности это все встроить в .ехе чтоб при запуске віполнялись єти действия.

Помогите пожалуста.
Или дай те хотя бы идею как это все реализовать.
2 мар 09, 18:50    [6878778]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
А какие могут быть идеи
Сами же написали APPEND FROM там тип CVS есть
Но есть нюансы - если у вас "настоящий" CVS файл - тогда в нем первая строка содержит название полей поэтому при импорте такого типа файла первая строка не импортируеться.
Иногда попадаються файлы с расширением CVS , но у них нет "заголовка" , а сразу идут данные.В таких случаях первая строка теряеться.
Для таких нужно использовать DELIMITED
3 мар 09, 10:49    [6880081]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
sergeyermak
Member

Откуда:
Сообщений: 65
Просто я хотел бы узнать где именно написать эту програму, что при запуски .ехе проекта на ФоксПро запускалась команда Append from&
3 мар 09, 14:29    [6881642]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
проходящий.
Guest
sergeyermak
Просто я хотел бы узнать где именно написать эту програму, что при запуски .ехе проекта на ФоксПро запускалась команда Append from&

Программу пишут в среде разработки. В ней же отлаживают. Потом из нее же собирают ехе-файл.
Это что-то очень необычное?
3 мар 09, 15:32    [6882055]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
Зингер
Member

Откуда: Белгород
Сообщений: 43
sergeyermak
Просто я хотел бы узнать где именно написать эту програму, что при запуски .ехе проекта на ФоксПро запускалась команда Append from&

Если я правильно понял, то у вас должен запускаться EXE-файл, скомпилированный в проекте?
Тогда, как я писал уже:
1) Открываете файл на низком уровне - Fopen()
2) Читаете и перемещаете указатель внутри текстового файла - Fread() и Fseek()
3) Добавляете записи в таблицу - Append Blank ...
4) Закрываете файл (Обязательно) - Fclose()
3 мар 09, 17:33    [6882988]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
sergeyermak
Member

Откуда:
Сообщений: 65
Спасибо, считай что получилось.

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

Помогите пожайлуйста!!!
4 мар 09, 15:28    [6887054]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
проходящий.
Guest
sergeyermak
Спасибо, считай что получилось.

Только можна ответить на вопрос, как сделать чтоб вся информация с текстового файла заносилася
А сейчас не вся заносится? Через строку или как?
в таблицу которая принадлежит проекту,
Шо за зверь?
то есь импотрировалась из текстового файла в .dbf

Ниче не понял. А сейчас она из воздуха берется? А куда импотрируется?
4 мар 09, 15:53    [6887200]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
sergeyermak
Member

Откуда:
Сообщений: 65
Я написал такой код

IF FILE('3.txt') && Does file exist?
gnErrFile = FOPEN('3.txt',12) && If so, open read/write
ELSE
gnErrFile = FCREATE('3.txt') && If not, create it
ENDIF
IF gnErrFile < 0 && Check for error opening file
WAIT 'Cannot open or create output file' WINDOW NOWAIT
ELSE && If no error, write to file
=FRead(gnErrFile,10)
=FSEEK (gnErrFile,0,2)
APPEND BLANK 1.dbf
ENDIF
=FCLOSE(gnErrFile) && Close file

Но оно не хочет работать, то есьт откуда оно будет брать мою таблицу?
4 мар 09, 16:51    [6887620]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
проходящий.
Guest
sergeyermak
Я написал такой код

IF FILE('3.txt') && Does file exist?
gnErrFile = FOPEN('3.txt',12) && If so, open read/write
ELSE
gnErrFile = FCREATE('3.txt') && If not, create it
ENDIF
IF gnErrFile < 0 && Check for error opening file
WAIT 'Cannot open or create output file' WINDOW NOWAIT
ELSE && If no error, write to file
=FRead(gnErrFile,10)
=FSEEK (gnErrFile,0,2)
APPEND BLANK 1.dbf
ENDIF
=FCLOSE(gnErrFile) && Close file

Но оно не хочет работать, то есьт откуда оно будет брать мою таблицу?

1. Зачем создавать отстутсвующий 3.txt? Что собрались импортировать из пустого файла?
2. Или таки он выходной файл и не из него, а в него надо ЭКСПОРТИРОВАТЬ данные из dbf? Если так, то зачем его создавать так?
3. В каком хелпе увидено/прочтено/понято такое: APPEND BLANK 1.dbf ? Что по Вашему мнению эта команда должна сделать?

И где здесь предложенная Append From? В виде
Appent from 3 type csv

Так из какого файла, что, в каком виде и куда надо перенести?
4 мар 09, 17:38    [6887986]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
sergeyermak
Member

Откуда:
Сообщений: 65
Мне надо из 3.txt импотрировать даные в .dbf файл который уже существует, то есть его надо перезаписать.

Я сделал команду

APPEND FROM C:\Temp\1.txt TYPE CSV ;

И все работает, только почему то не импортирует первую запись из текстового файла.

И очень важный вопрос, как можно сделать чтоб при запуске моего .ехе проекта, запускалась приведена выще команда APPEND FROM, и импортировались данные?
4 мар 09, 18:06    [6888200]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
проходящий.
Guest
sergeyermak,

давайте таки один вопрос решить в одной теме, а не размазываться по двум. Отвечайте на вопросы в соседней теме, там и продолжим.
4 мар 09, 18:14    [6888262]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
sergeyermak
Я сделал команду

APPEND FROM C:\Temp\1.txt TYPE CSV ;

И все работает, только почему то не импортирует первую запись из текстового файла.

Вы вообще читаете что вам отвечают ?

-=AlexiS=-
Но есть нюансы - если у вас "настоящий" CVS файл - тогда в нем первая строка содержит название полей поэтому при импорте такого типа файла первая строка не импортируеться.
Иногда попадаються файлы с расширением CVS , но у них нет "заголовка" , а сразу идут данные.В таких случаях первая строка теряеться.
Для таких нужно использовать DELIMITED
4 мар 09, 18:52    [6888444]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
sergeyermak
Member

Откуда:
Сообщений: 65
Не получаеться, все равно выводит без первой строки

APPEND FROM C:\Temp\1.txt DELIMITED TYPE CSV ;

или

APPEND FROM C:\Temp\1.txt TYPE DELIMITED CSV ;
4 мар 09, 19:08    [6888476]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
Зингер
Member

Откуда: Белгород
Сообщений: 43
sergeyermak
Я написал такой код

IF FILE('3.txt') && Does file exist?
gnErrFile = FOPEN('3.txt',12) && If so, open read/write
ELSE
gnErrFile = FCREATE('3.txt') && If not, create it
ENDIF
IF gnErrFile < 0 && Check for error opening file
WAIT 'Cannot open or create output file' WINDOW NOWAIT
ELSE && If no error, write to file
=FRead(gnErrFile,10)
=FSEEK (gnErrFile,0,2)
APPEND BLANK 1.dbf
ENDIF
=FCLOSE(gnErrFile) && Close file

Но оно не хочет работать, то есьт откуда оно будет брать мою таблицу?


use <Ваша таблица> in <Алиас> && Отсюда ОНО будет брать таблицу

IF FILE('3.txt') && Такой файл есть?
gnErrFile = FOPEN('3.txt',12) && Если да, отрываем его
ELSE
gnErrFile = FCREATE('3.txt') && Если нет, то создаем его(Зачем?)
ENDIF
IF gnErrFile < 0 && Если открытие файла не произошло
WAIT 'Не могу открыть файл!' WINDOW NOWAIT
ELSE && Если нет ошибок, файл открылся (Ура!)
cFraza=FRead(gnErrFile,10) &&Читаем первые 10 симоволов
=FSEEK (gnErrFile,0,2) &&Не надо (Курсор в файле и так уже переместился на десятую строку)
APPEND BLANK in 1.dbf
replace <поле1> with cFraza in <алиас> && Вот оно
ENDIF
=FCLOSE(gnErrFile) && Close file

Счастье!

Я сторонник такого подхода импорта/экспорта данных из текстового файла.
4 мар 09, 21:10    [6888712]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
sergeyermak
Member

Откуда:
Сообщений: 65
А можешь раскщать что писать в строку

replace <поле1> with cFraza in <алиас>,

И как поставить в FRead не десять записей, а все записи.

Короче сделал вот так но пишет ошибку "Не могу открыть файл!"

Убираю условия ошибки, тогда пишет что .dbf не существует

use zarplata!prem

IF FILE('1.txt')
gnErrFile = FOPEN('1.txt',12)
ELSE
gnErrFile = FCREATE('1.txt')
ENDIF
IF gnErrFile < 0
WAIT Не могу открыть файл!' WINDOW NOWAIT
ELSE
cFraza=FRead(gnErrFile,12)
APPEND BLANK in prem
replace Tn with cFraza in zarplata!prem
ENDIF
=FCLOSE(gnErrFile)


Можешь скинуть какой небудь свой рабочий пример?

И эта програма относиться ко всем текстовым файлам или нет.Просто у меня файл с расширением CSV

Заранее спасибо!
5 мар 09, 17:51    [6893368]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
Зингер
Member

Откуда: Белгород
Сообщений: 43
sergeyermak
А можешь раскщать что писать в строку

replace <поле1> with cFraza in <алиас>,

И как поставить в FRead не десять записей, а все записи.

Короче сделал вот так но пишет ошибку "Не могу открыть файл!"

Убираю условия ошибки, тогда пишет что .dbf не существует

use zarplata!prem

IF FILE('1.txt')
gnErrFile = FOPEN('1.txt',12)
ELSE
gnErrFile = FCREATE('1.txt')
ENDIF
IF gnErrFile < 0
WAIT Не могу открыть файл!' WINDOW NOWAIT
ELSE
cFraza=FRead(gnErrFile,12)
APPEND BLANK in prem
replace Tn with cFraza in zarplata!prem
ENDIF
=FCLOSE(gnErrFile)


Можешь скинуть какой небудь свой рабочий пример?

И эта програма относиться ко всем текстовым файлам или нет.Просто у меня файл с расширением CSV

Заранее спасибо!


Дано: Файл Imy.CSV - текстовой с содержанием 123456,Запись1. В качестве разделителя - ",". Задача: Импортировать данные в таблицу Table1.dbf со структурой Pole1 n(6), pole2 char(10).

create table table1 (pole1 n(6), Pole2 c(10)) -создаем таблицу

append blank in table1 &&добавляем запись в таблицу

if file('Imy.csv')=.t. &&Если файл найден
nFlag=fopen('imy.csv') &&открываем файл низкового уровня
cFraza=alltrim(fgets(nFlag,8190)) && Считываем всю первую строку, в нашем случае "123456,Запись1,"

*Далее ищем разделитель (запятую), т.е. chr(44) - Начало блока 1
FOR i=1 TO LEN(cfraza)
IF SUBSTR(cfraza,i,1)=CHR(44) && Это знак "," ?
replace Pole1 WITH VAL(SUBSTR(cfraza,1,i-1)) IN table1 && Проставляем в Pole1 123456
J=I+1
EXIT
ENDIF
ENDFOR
*Далее ищем разделитель (запятую), т.е. chr(44) - Конец блока 1

*Далее ищем разделитель (запятую), т.е. chr(44) - Начало блока 2
FOR i=J TO LEN(cFraza)
IF SUBSTR(cFraza,i,1)=CHR(44) && Это знак "," ?
replace Pole1 WITH VAL(SUBSTR(cFraza,1,i-1)) IN table1 && Проставляем в Pole2 "Запись1"
EXIT
ENDIF
ENDFOR
*Далее ищем разделитель (запятую), т.е. chr(44) - Конец блока 2
endif

=fclose(nFlag)
sele table1
browse
* И будет счастье!

Кстати, в качестве разделителя не советую использовать Chr(44), т.е. "," , потому что может попасться левая запятая. Лучше используй chr(1).
5 мар 09, 22:25    [6894103]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
Galyamov Rinat
Member

Откуда:
Сообщений: 658

> *Далее ищем разделитель (запятую), т.е. chr(44) - Начало блока 1
> FOR i=1 TO LEN(cfraza)
> IF SUBSTR(cfraza,i,1)=CHR(44) && Это знак "," ?
> replace Pole1 WITH VAL(SUBSTR(cfraza,1,i-1)) IN table1 && Проставляем
> в Pole1 123456
> J=I+1
> EXIT
> ENDIF
> ENDFOR
> *Далее ищем разделитель (запятую), т.е. chr(44) - Конец блока 1

Товарищ! А вы не задумывались над тем, сколько по времени занимает ваш поиск
запятой???

Фокс сам по себе не самым оптимальным образом перераспределяет память при
работе со стораками, так мы еще строчные функции в цикл загоним. Ну а что?
Машины теперь мощные - нефиг процессорам простаивать!!!

Да и каждое поле описывать по отдельности - много чести:

cfraza='вчера, сегодня, завтра'

FOR i=1 TO OCCURS(',',cfraza)+1

j1=AT(',',cfraza,i)

IF i=1

j0=0

ELSE

j0=AT(',',cfraza,i-1)

ENDIF


IF j1=0

?LTRIM(SUBSTR(cfraza,j0+1))

ELSE

?LTRIM(SUBSTR(cfraza,j0+1,j1-j0-1))

ENDIF

ENDFOR


Posted via ActualForum NNTP Server 1.4

6 мар 09, 05:59    [6894496]     Ответить | Цитировать Сообщить модератору
 Re: Програма импорта данных  [new]
sergeyermak
Member

Откуда:
Сообщений: 65
Спасибо всем кто откликнулся!

У меня все получилось, с помощью простого Append
10 мар 09, 17:49    [6907189]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить