powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт из .TXT с дозаполнением
7 сообщений из 7, страница 1 из 1
Импорт из .TXT с дозаполнением
    #32823830
graber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа (и дамы разумеется) !!
Есть проблема.
Идед импорт из xx.txt файла в dbf НО !!!
в txt в полях повторяющиеся значения не приведены.
В итоге в таблице поля одной записи идут полностью со значениями,
а несколько следующих без значений в некоторых полях.
Для дальнейшей обработки нужны ВСЕ поля.
Подскажите как при импорте проверять что если значение " ",
то подставлять значение предидущей спроки.

Заранее ВСЕМ благодарен.
...
Рейтинг: 0 / 0
Импорт из .TXT с дозаполнением
    #32823870
Samir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
например так

APPEND FROM MYFILE.TXT TYPE SDF FOR !EMPTY(MYFIELD1)
...
Рейтинг: 0 / 0
Импорт из .TXT с дозаполнением
    #32824089
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При импорте такого не сделаешь. Самое большее, что ты можешь сделать это просто не импортировать записи с пустыми значениями, о чем и написал Samir .

Если же эти записи нужны, но вместо пустых значений надо ввести некое значение, то у тебя 2 варианта:

-) Используя групповые команды импортировать файл как есть, а потом просканировать файл и заменить пустые значения на значения из предыдущей записи

-) Отказаться от групповых команд импорта, а заливать файл построчно с символьным разбором (очень медленно)

Скорее всего, ты используешь первый вариант. В этом случае имей в виду, что физически, записи всегда добавляются в конец файла. Т.е. логика будет примерно следующая

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
LOCAL lnReccount
lnReccount = Reccount("MyTable")
select MyTable
SET ORDER TO  0 
APPEND FROM xx.txt
IF m.lnReccount =  0 
	GO TOP
ELSE
	GO (m.lnReccount)
ENDIF
SCAN REST
	* Последовательная обработка добавленных записей
	...
ENDSCAN
...
Рейтинг: 0 / 0
Импорт из .TXT с дозаполнением
    #32824156
graber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята это все не подходит.
Импорт "хитрый", файл неупорядоченный.
Так что идет только на низком уровне - вид такой

do while !feof(dsk)
lstr=fgets(dsk)
lst=1
leop=.f.
if substr(lstr,хх,х)="ТТ" and substr(lstr,хх,х)="КК" && Найдено нач нов стр
select MyFile
do apprec
replace Field1 with substr(lstr,хх,х)
select RECV && Таблица с описанием параметров полей для импорта
go top
scan
if lst#RECV.nst
do while lst#RECV.nst
lstr=fgets(dsk)
if substr(lstr,хх,х)="ТТ" and substr(lstr,хх,х)="КК"
leop=.t.
=fseek(dsk,-len(lstr),1)
exit
endif
lst=lst+1
enddo
endif
if !leop
lval=alltrim(substr(lstr,RECV.ncol,RECV.sizer))
lfild=alltrim(RECV.marka)
if RECV.marka="DDD" and empty(substr(lstr,уу,уу))
do while !feof(dsk)
lstr=fgets(dsk)
lval=alltrim(substr(lstr,RECV.ncol,RECV.sizer))
if !empty(substr(lstr,уу,уу))
exit
endif
enddo
endif
select MyFile
replace &lfild with lval
select RECV
else
exit
endif
endscan
endif
enddo

Вот такто !!
И ват эти самые "lval" повторяющиеся не занесены в сам исходный .TXT.
А они жуть как нужны !!!
ДА забыл что все это безобразие в VFP50
...
Рейтинг: 0 / 0
Импорт из .TXT с дозаполнением
    #32824358
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так какие проблемы-то? Запоминаешь предыдущее значение (из предшествующей строки) и если текущее пустое, то подставляешь вместо него запомненное.

Честно говоря, лень разбирать такой "слепой" код, но общая идея примерно такая:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
LOCAL lstr, lval, lvalPrev
STORE '' TO lvalPrev

DO WHILE !FEOF(dsk)
	lstr = fgets(dsk)
	lval = SUBSTR(...)
	IF EMPTY(m.lval)
		lval = m.lvalPrev
	ELSE
		lvalPrev = m.lval
	ENDIF
	...
ENDDO

Разумеется, это работает, если в твоем текстовом файле строки не перепутаны. Т.е. строки с пустым значением означают именно то, что надо брать значение из первой непустой строки до текущей.
...
Рейтинг: 0 / 0
Импорт из .TXT с дозаполнением
    #32824935
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще несколько идей. Может пригодятся:

-) Если длина одной строки текстового файла не превышает 254 символа, то можно сначала загнать весь текстовый файл в премежуточную таблицу из одного символьного поля длиной 254 символа:

CREATE CURSOR curFile (cText C(254))
APPEND FROM xx.txt TYPE DELEMITED

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

-) Если количество символов в одной строке больше, чем 254, то можно загнать текстовый файл в Memo-поле:

CREATE CURSOR curFile (cText M)
APPEND BLANK
APPEND MEMO cText FROM xx.txt

Далее использовать функции навигации по Memo-полям

SET MEMOWIDTH TO 254
_MLINE
MLINE()
MEMLINES()

Идея та же. Облегчить навигацию по строкам текстового файла

-) Не обращать внимание на пустые значения полей в процессе заполнения таблицы. А вот по окончании заполнения пройтись по итоговой таблице и заполнить эти пустые значения данными из предшествующих записей.
...
Рейтинг: 0 / 0
Импорт из .TXT с дозаполнением
    #32825465
graber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем.
Особо ВладимируМ
Я как-то сам до этого не дадумался.
В общем все ОК
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт из .TXT с дозаполнением
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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