powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / TXT-DBF с MEMO-полем
10 сообщений из 10, страница 1 из 1
TXT-DBF с MEMO-полем
    #33077117
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У мея загвоздка с временем перегона MEMO-поля из DBF в TXT и наоборот...

Если у кого есть лучше вариант или кто может помочь с ускорением работы плиз хелп...

Перегон из DBF в TXT
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
	
my_file_fpt = FCREATE(my_file + '.fxt')
SELECT таблица1
SCAN
	IF my_file_fpt >  0 
		=FPUTS(my_file_fpt,&my_znach_fpt)
	ENDIF
ENDSCAN
где:
my_znach_fpt - значение всех мемо-полей с разделителем CHR(1) и заменеными
CHR(10) на CHR(3) и CHR(13) на CHR(4)
Отрабатывает 3 сек. при 3 мемо-полях и 43700 записей

Перегон из DBF в TXT
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
my_file_memo = FOPEN(my_file+'.fxt')
SELECT &my_tab_to_txt
SCAN
	STORE '' TO my_znach
	STORE  1  TO kol_zn
	my_str_znach = FGETS(my_file_memo, 8192 )
	DO WHILE !EMPTY(my_str_znach) AND AT(CHR( 1 ),my_str_znach) #  0 
		my_znach[kol_zn] = LEFT(my_str_znach,AT(CHR( 1 ),my_str_znach)- 1 )
		my_str_znach = RIGHT(my_str_znach,LEN(my_str_znach)-AT(CHR( 1 ),my_str_znach))
		kol_zn = kol_zn +  1 
	ENDDO
	&my_rep_mem
ENDSCAN
где:
my_znach - масив для текстовых полей.
kol_zn - количество полей(в данном случае 3)
my_rep_mem - перезаписываются значения мемо-полей значениями всех текстовых-полей без разделителем CHR(1) и заменеными
CHR(3) на CHR(10) и CHR(4) на CHR(13)
Отрабатывает от 9 до 12 сек. при 3 мемо-полях и 43700 записей
при чем простая обработка файла отрабатывает 1 сек.

Плиз хелп... Очень нужно...
...
Рейтинг: 0 / 0
TXT-DBF с MEMO-полем
    #33077225
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а так?
COPY MEMO MemoFieldName TO FileName
[ADDITIVE] [AS nCodePage]

ADDITIVE - добавляет мемо поле в конец указаного текстового файла
...
Рейтинг: 0 / 0
TXT-DBF с MEMO-полем
    #33077267
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И что мне это даст???

Мне надо культорно передать... Что б другая прога... На другом языке мою ху... понимала + плюс я сам эту ху... должен быстро зачитывать...

В текстовый файл работает быстро...
Вот обратно нет...
Счет TXT-DBF : 3 сек на 9 - 12 сек

Хотя функции те-же...
...
Рейтинг: 0 / 0
TXT-DBF с MEMO-полем
    #33077322
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заметил в чем трабла...

Эт при пустых мемо-полях... оно так себя ведет..
Если там были записи и запустить прогу... то отрабатывает за тех-же 3 сек.

Как с этим мона бороться???

Плиз... Не уж ни-кто не сталкивался...
...
Рейтинг: 0 / 0
TXT-DBF с MEMO-полем
    #33077607
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi, IgorProgrammer!

>Перегон из DBF в TXT
А зачем условие IF my_file_fpt > 0 проверяется на каждой записи?
Лучше уж поставить его перед SCAN, и внутри него - процедуру обработки ошибок.


>Перегон из DBF (?? - FPT :) в TXT
А может так попробовать:

SET PRINTER TO text.txt
SET PRINTER ON
SCAN
?memopole
ENDSCAN
SET PRINTER off
SET PRINTER TO

Да и в первом случае тоже наверно можно. Только там всегда в начале файла вставляется символ CHR(13). Если только не сделать условие, чтобы первая запись писалась в файл не с помощью команды "?", а - с помощью "??".
...
Рейтинг: 0 / 0
TXT-DBF с MEMO-полем
    #33077744
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CrispyHi, IgorProgrammer!
>Перегон из DBF в TXT
А зачем условие IF my_file_fpt > 0 проверяется на каждой записи?
Лучше уж поставить его перед SCAN, и внутри него - процедуру обработки ошибок.
Сорри опечатка просто собирал куски...
Эт проверка в начале стоит...

Скорость вывода в текстовый файл меня устраивает...
Меня не устраивает скорость вывода мемо-полей, из текстового файла в дбф...

Функции те-же...
Проблема в пустоте мемо-полей.
repla при повторном запуске отрабатывает положенных этой функции 3 сек.
А у меня всегда пустые мемо-поля...
...
Рейтинг: 0 / 0
TXT-DBF с MEMO-полем
    #33077803
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в пустоте мемо-полей

scan for !empty(my_memo)
endscan

где my_memo - есть имя мемополя
...
Рейтинг: 0 / 0
TXT-DBF с MEMO-полем
    #33077919
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
leafПроблема в пустоте мемо-полей

scan for !empty(my_memo)
endscan

где my_memo - есть имя мемополя]

Эт круто...
Скан какого мемо поля... Если эт текстовый файл...

Пустые мемо-поля куда я хочу из текста записать...

Меня мучает совесть что при 437000 записях...
Код: plaintext
1.
2.
3.
SELECT tab1
SCAN
	REPLACE naim WITH PADR(' ', 200 ,'2'), stshifrres WITH PADR(' ', 200 ,'2'), primbuh WITH ''
ENDSCAN
naim,stshifrres,primbuh - мемо поля
Отрабатывает за 5-6 сек.

моя функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
my_file_memo = FOPEN(my_file+'.fxt')
SELECT &my_tab_to_txt
SCAN
	STORE '' TO my_znach
	FOR kol_zn =  1  TO my_for_kol
		my_znach[kol_zn] = ALLTRIM(FGETS(my_file_memo, 8192 ))
	ENDFOR
	*&my_rep_mem
	REPLACE naim WITH s1(my_znach[ 1 ]), stshifrres WITH s1(my_znach[ 2 ]), primbuh WITH s1(my_znach[ 3 ]) IN &my_tab_to_txt
ENDSCAN
Отрабатывает за 8-9 сек.
Просто обработка файла в скане за 1-2 сек.
Куда делось еще 1-2 сек.

Не хочется терять в скорости...
Просто могут быть файлы и на 1 000 000 записей...
...
Рейтинг: 0 / 0
TXT-DBF с MEMO-полем
    #33077955
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри опечатка с количеством записей...
их 43 700...
...
Рейтинг: 0 / 0
TXT-DBF с MEMO-полем
    #33078028
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант.

Попробуй уйти от строкового разбора к групповым командам. Логика примерно следующая:

Создается временная таблица из 2 полей: код записи, мемо-поле и индексом по коду записи

Здесь код записи - равен коду записи из твоей основной таблицы. Нужен для того, чтобы можно было потом сделать RELATION

Если версия FoxPro меньше 9, то это делается так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE CURSOR Maket (tabID I, Content M)

SELECT TabID, Content FROM Maket ;
UNION ALL
SELECT TabID, "" FROM MyTab ;
INTO CURSOR tmpTab NOFILTER

USE IN Maket
select tmpTab
INDEX ON TabID TAG TabID

Здесь MyTab - это твоя таблица, куда в конце концов должен попасть результат, а TabID - это ключевое поле таблицы. Если такого нет, то в данном случае сойдет RECNO()


Сканируем эту таблицу и записываем в ОДНО мемо поле неразобранные строки по 8192 символов.

Код: plaintext
1.
2.
3.
4.
select tmpTab
SET ORDER TO  0 
SCAN
	REPLACE Content WITH FGETS(my_file_memo, 8192 )
ENDSCAN


Подключаем временную таблицу по RELATION как подчиненную к твоей основной

Код: plaintext
1.
2.
3.
select tmpTab
SET ORDER TO TabID
select MyTab
SET RELATION TO TabID INTO tmpTab


ОДНОЙ командой делаем разбор содержимого одного memo-поля подчиненной таблицы и запись в основную

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select MyTab

REPLACE ALL ;
Field1 WITH SubStr(tmpTab.Content, 1 ,AT(chr( 1 ),tmpTab.Content )- 1 ), ;
Field2 WITH SubStr(tmpTab.Content,AT(chr( 1 ),tmpTab.Content, 1 )+ 1 ,;
AT(chr( 1 ),tmpTab.Content, 2 )-AT(chr( 1 ),tmpTab.Content , 1 )), ;
Field3 WITH SubStr(tmpTab.Content ,AT(chr( 1 ),tmpTab.Content, 2 )+ 1 )


Еще одной командой заменяем символы CHR(3) и CHR(4)
Код: plaintext
1.
2.
3.
4.
5.
select MyTab

REPLACE ALL ;
Field1 WITH CHRTRAN(Field1,CHR( 3 )+CHR( 4 ),CHR( 13 )+CHR( 10 )), ;
Field2 WITH CHRTRAN(Field2,CHR( 3 )+CHR( 4 ),CHR( 13 )+CHR( 10 )), ;
Field3 WITH CHRTRAN(Field3,CHR( 3 )+CHR( 4 ),CHR( 13 )+CHR( 10 ))

Правда, не знаю, насколько это ускорит или замедлит работу. Идея в том, чтобы заменить одиночные команды разбора каждой строки на групповые.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / TXT-DBF с MEMO-полем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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