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

Откуда: Moscow
Сообщений: 61
для банка требуется на дискетке принести информацию в таком виде:


АО “МОСХЛЕБТОРГ”
12 июня 2001 г.
отделение «Алексеевское»
R ; VE
RUB

ИВАНОВА;СВЕТЛАНА;НИКОЛАЕВНА;МОНОЛИТ;VII-МЮ №3214564;21.12.80 43 ОМ Г.МОСКВЫ;МОСКВА,УЛ. ЗЕЛЕНАЯ Д.18, КОРП. 3, КВ.123; 19650517;456-76-13;123-12-78;
SVETLANA IVANOVA ПЕТРОВА; ЕЛЕНА;СЕРГЕЕВНА;; 2456 3214564;11.01.01 57 ОМ Г.МОСКВЫ;МОСКВА,УЛ.ВОЛХОНКА Д.2, КВ.11;19800501; ; ; ;


первый блок и второй делаю разными запросами, а как
это все объединить в одном текстовом файле,
чтоб форматирование было как указано??
10 дек 04, 13:37    [1173872]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
Для второй выборки COPY TO <FileName> DELIMITED WITH ";"
Потом lcFile=FILETOSTR(<FileName>), дописываешь заголовок и
STRTOFILE(lcFile,<FileName>).
10 дек 04, 14:04    [1174034]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
AiSK
Member

Откуда:
Сообщений: 210
Не знаю, может слишком просто кажется и есть какой-то сложный момент , но

IF FILE('A:\...файл на дискете')
glfile = FOPEN(''A:\...файл на дискете',12)
ELSE
glfile = FCREATE(''A:\...файл на дискете')
ENDIF
IF glfile < 0
WAIT 'Не могу открыть файл ... для записи ' WINDOW NOWAIT
ELSE

=FWRITE(glfile,СТРОКА+CHR(13))
* можно использовать и FPUTS() – записывает строку в файл и добавляет
*в конец перевод строки
* Для вставки разрывов используйте CHR(13)

=FCLOSE(glfile)

ENDIF

Если под форматирование имеете в виду вставку точек с запятой, то посмотрите символьные функции
http://www.foxhelp.ru/FunkciiVFP678?v=1e64
10 дек 04, 14:07    [1174050]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
Urri
Member

Откуда: Москва
Сообщений: 2693
SET TEXTMERGE (TO, ON) и TEXT, ENDTEXT, /, //

SET PRINTER (TO, ON) и ?, ??
10 дек 04, 15:22    [1174413]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
alex_dch
Member

Откуда: Moscow
Сообщений: 61
IF FILE('c:\vygruzka.txt')
glfile = FOPEN('c:\vygruzka.txt',12)
ELSE
glfile = FCREATE('c:\vygruzka.txt')
ENDIF
IF glfile < 0
WAIT ' не могу писать в файл.. ' WINDOW NOWAIT
ELSE

=FWRITE(glfile,'Название+CHR(13))
=FWRITE(glfile,'12 июня 2001 г.'+CHR(13))
=FWRITE(glfile,'îòäåëåíèå "Àëåêñååâñêîå"'+CHR(13))
=FWRITE(glfile,'R' + ';' + 'VE' + CHR(13))
=FWRITE(glfile,'RUB' + CHR(13))
=FWRITE(glfile,CHR(13))


=FCLOSE(glfile)

ENDIF


для составления первого блока все замечательно работает!
как теперь забирать значения из курсора, для составления
второго блока??

спасибо за ссылочку на фоксхелп, отличный ресурс!

а еще что делать с кодировкой при копировании из фокса,
некоторые зюки оставил в коде, чтоб было видно о чем я
10 дек 04, 15:37    [1174487]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
alex_dch
Member

Откуда: Moscow
Сообщений: 61
... собственно низ запроса который курсор формирует

into cursor crsVygruz ;
where fc.enddate >= dd1 and not deleted() ;
order by surname, firstname, secondname



IF FILE('c:\vygruzka.txt')
glfile = FOPEN('c:\vygruzka.txt',12)
ELSE
glfile = FCREATE('c:\vygruzka.txt')
ENDIF
IF glfile < 0
WAIT 'не могу открыть файл.. ' WINDOW NOWAIT
ELSE

=FWRITE(glfile,'Íàèìåíîâàíèå îðãàíèçàöèè'+CHR(13))
=FWRITE(glfile,'12 èþíÿ 2001 ã.'+CHR(13))
=FWRITE(glfile,'îòäåëåíèå "Àëåêñååâñêîå"'+CHR(13))
=FWRITE(glfile,'R' + ';' + 'VE' + CHR(13))
=FWRITE(glfile,'RUB' + CHR(13))
=FWRITE(glfile,CHR(13))

select crsVygruz
go top

scan
=FWRITE(glfile,allt(surname)+ ';' + allt(firstname)+ ';' + allt(secondname) + CHR(13))
endscan

ENDIF
=FCLOSE(glfile)



собственно вот так и все работает!
сам допер! :))
но все равно всем спасибо!
10 дек 04, 16:42    [1174822]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
alex_dch
Member

Откуда: Moscow
Сообщений: 61
А с кодировкой при копировании всетаки можно что-то сделать????
10 дек 04, 16:45    [1174835]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
AiSK
Member

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

для составления первого блока все замечательно работает!
как теперь забирать значения из курсора, для составления
второго блока??


Для составления второго блока не закрывайте файл командой
=FCLOSE(glfile) (Только в конце работы). Переключаетесь для работы с курсором в его рабочую область SELECT ом (подозреваю. что в курсор выводите информацию для второго блока) и последовательно сканируете его
SELECT ИмяКурсора

SCAN
SCATTER MEMVAR
*обрезаете ALLTRIM-ом строковые переменные (не забудьте сконвертировать *нестроковые переменные функцией STR)
*
m.СТРОКА=m.(ALLTRIM(имена полей курсора - поле 1))+';'+ ;
m.(ALLTRIM(имена полей курсора - поле 2))+... и так далее
=FWRITE(glfile,m.СТРОКА+CHR(13))
ENDSCAN

=FCLOSE(glfile)


а еще что делать с кодировкой при копировании из фокса,
некоторые зюки оставил в коде, чтоб было видно о чем я

Вы , может , просматривает файл в DOS кодировке (кстати , спросите у банка, текстовый файл в какой кодировке?). В любом случае воспользуйтесь функцией CPCONVERT
Скорее всего , вам нужно
m.СТРОКА=CPCONVERT(1251,866,m.СТРОКА)
10 дек 04, 16:48    [1174847]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
alex_dch
Member

Откуда: Moscow
Сообщений: 61
ну я почти так и сделал..

только с подстановкой наверно более профессионально?

SCAN
SCATTER MEMVAR
*обрезаете ALLTRIM-ом строковые переменные (не забудьте сконвертировать *нестроковые переменные функцией STR)
*

m.СТРОКА=m.(ALLTRIM(имена полей курсора - поле 1))+';'+ ;
m.(ALLTRIM(имена полей курсора - поле 2))+... и так далее


=FWRITE(glfile,m.СТРОКА+CHR(13))
ENDSCAN

=FCLOSE(glfile)
10 дек 04, 16:54    [1174878]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
AiSK
Member

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

m.СТРОКА=m.(ALLTRIM(имена полей курсора - поле 1))+';'+ ;
m.(ALLTRIM(имена полей курсора - поле 2))+... и так далее

Ошибся маленько
ALLTRIM(m.имена полей курсора - поле 1))...

SCATTER MEMVAR просто потому, что удобнее писать возможные манипуляции
(преобразование типа данных и т.д.) с переменными , а не полями
10 дек 04, 17:02    [1174926]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
alex_dch
Member

Откуда: Moscow
Сообщений: 61
select crsVygruz
SCATTER MEMVAR
go top


scan
m.stroka = allt(m.surname)+ ';' + allt(m.firstname)+ ';' + allt(m.secondname)
=FWRITE(glfile,m.stroka + CHR(13))
endscan

ENDIF
=FCLOSE(glfile)

если делаю так, то пишет только 2 кавычки, а поля пустые
а если
m.stroka = allt(m.surname)+ ';' + allt(m.firstname)+ ';' + allt(m.secondname)
до "скана" то заполняет полько первым значением, и это понятно..


а еще научите как выделять в прямоугольник текст в форуме, чтоб отделить
важное
10 дек 04, 17:26    [1175036]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
leaf
Member [заблокирован]

Откуда: Ростов-на-Дону --> Москва
Сообщений: 2661
если не ошибаюсь то можно еще и так
scan
FPUTS(glfile,allt(m.surname)+ ';' + allt(m.firstname)+ ';' + allt(m.secondname))
endscan
10 дек 04, 18:11    [1175224]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
leaf
Member [заблокирован]

Откуда: Ростов-на-Дону --> Москва
Сообщений: 2661
все дело в префиксе m.

select crsVygruz
scan
fputs(glfile,allt(crsVygruz.surname)+ ';' + allt(crsVygruz.firstname)+ ';' + allt(crsVygruz.secondname))
endscan
=FCLOSE(glfile)

go top - для scan необязательно
сразу не въехал
10 дек 04, 18:15    [1175238]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
AiSK
Member

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

select crsVygruz
SCATTER MEMVAR
go top


scan
m.stroka = allt(m.surname)+ ';' + allt(m.firstname)+ ';' + allt(m.secondname)
=FWRITE(glfile,m.stroka + CHR(13))
endscan

ENDIF
=FCLOSE(glfile)

если делаю так, то пишет только 2 кавычки, а поля пустые
а если
m.stroka = allt(m.surname)+ ';' + allt(m.firstname)+ ';' + allt(m.secondname)
до "скана" то заполняет полько первым значением, и это понятно..

1) При SCAN не нужен GO TOP
2) SCATTER MEMVAR внутри цикла сканирования (должен повторяться), а не один раз в начале. Команда преобразует поля в переменные ( для удобства чтобы не путать с названиями полей переменные начинаются на m.)



а еще научите как выделять в прямоугольник текст в форуме, чтоб отделить
важное


Пользуйся кнопками QUOTE (помещая текст цитаты между парами появляющихся скобок) или чтобы выделить блок кода кнопкой SRC
10 дек 04, 18:35    [1175285]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
leaf
Member [заблокирован]

Откуда: Ростов-на-Дону --> Москва
Сообщений: 2661
насчет кодовой страницы
select crsVygruz
scan
fputs(glfile,cpconvert(1251,866,allt(crsVygruz.surname)+ ';' + allt(crsVygruz.firstname)+ ';' + allt(crsVygruz.secondname)))
endscan
10 дек 04, 18:44    [1175306]     Ответить | Цитировать Сообщить модератору
 Re: Как создать такой текстовый файл??  [new]
MaestroEv
Member

Откуда: г.Благовещенск
Сообщений: 269
И ведь предлогал тебе Urri солидное стройное решение...

Set Textmerge On
Set textmerge to (файл) additive

Нет же - ты выбрал самое сложное.... Работа с файлами на низком уровне - неблагодарное занятие.
ИМХО.
11 дек 04, 03:42    [1175903]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить