:: Visual Foxpro, Foxpro for DOS
импорт из txt
vacikoff

Сообщений: 9
Дата регистрации: 29.03.2020
Подскажите как реализовать импорт данных из txt следующего вида:
#0.1
#57167
#28.02.2020 02:47
#202002
#9384
#
54152;1;;;;;;в.;огор;пп.;данные;уу.;1;;60.90;-33.47;-685.10;60.90;10.70;651.63;0.00;0.00;0.00;0.00;0.00;0.00;654;;;;;;;;0;6454;545;5454
54152;1;;;;;;в.;огор;пп.;данные;уу.;1;;60.90;-33.47;-685.10;60.90;10.70;651.63;0.00;0.00;0.00;0.00;0.00;0.00;654;;;;;;;;0;6454;545;5454
54152;1;;;;;;в.;огор;пп.;данные;уу.;1;;60.90;-33.47;-685.10;60.90;10.70;651.63;0.00;0.00;0.00;0.00;0.00;0.00;654;;;;;;;;0;6454;545;5454
в начале выгрузки под знаком # идут строчки о параметрах выгрузки от туда мне нужно забрать только дату, а сами данные идут ниже через ";"
Заранее спасибо!
Ratings: 0 negative/0 positive
Re: импорт из txt
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
А у тебя какие варианты? Какие подходящие команды фокса знакомы?
Ratings: 0 negative/0 positive
Re: импорт из txt
vacikoff

Сообщений: 9
Дата регистрации: 29.03.2020
скопом вставить у меня получается без проблем командой
APPEND FROM MyFile TYPE DELIMITED WITH "'" WITH CHARACTER ";"
интуитивно понимаю что в связи с тем что, фаил выгрузки имеет в начале строки с параметрами #, мне нужно смотреть в сторону построчного перебора, подобрать функцию не хватает знаний, прошу помощи

Пробую функцию FREAD() но она вытаскивает все данные с файла а мне нужен перебор по строчкам



Исправлено 1 раз(а). Последнее : vacikoff, 06.04.20 10:32
Ratings: 0 negative/0 positive
Re: импорт из txt
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
vacikoff
скопом вставить у меня получается без проблем командой
APPEND FROM MyFile TYPE DELIMITED WITH "'" WITH CHARACTER ";"
Прелестно.
Цитата:
интуитивно понимаю что в связи с тем что, фаил выгрузки имеет в начале строки с параметрами #, мне нужно смотреть в сторону построчного перебора,
С чего бы это?
Цитата:
подобрать функцию не хватает знаний, прошу помощи
Пробую функцию FREAD() но она вытаскивает все данные с файла
Кто вам сказал такую чушь? Да и с каких пор данные стали лежать НА файле? Вроде бы всегда лежали В файле? И, соответственно, данные всегда брались ИЗ файла.
Цитата:
а мне нужен перебор по строчкам
Еще раз - с чего бы это?
Инфа для размышлений:
Text to lcInp NOSHOW FLAGS 1 PRETEXT 4
#0.1
#57167
#28.02.2020 02:47
#202002
#9384
#
54152;1;;;;;;в.;огор;пп.;данные;уу.;1;;60.90;-33.47;-685.10;60.90;10.70;651.63;0.00;0.00;0.00;0.00;0.00;0.00;654;;;;;;;;0;6454;545;5454
54152;1;;;;;;в.;огор;пп.;данные;уу.;1;;60.90;-33.47;-685.10;60.90;10.70;651.63;0.00;0.00;0.00;0.00;0.00;0.00;654;;;;;;;;0;6454;545;5454
54152;1;;;;;;в.;огор;пп.;данные;уу.;1;;60.90;-33.47;-685.10;60.90;10.70;651.63;0.00;0.00;0.00;0.00;0.00;0.00;654;;;;;;;;0;6454;545;5454
EndText
?GetWordNum(lcInp, 6, '#')


------------------
Лень - это неосознанная мудрость.




Исправлено 1 раз(а). Последнее : ssa, 06.04.20 10:42
Ratings: 0 negative/1 positive
Re: импорт из txt
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Хорошие знания присутствуют! ) Так и вставляй скопом (в табличку), удали из таблички первые ненужные записи, у них в первом поле будет что-то несуразное, может символ звездочки, может 0.

Если через FOPEN, то читать надо не FREAD (прочитать заданное кол байт), а FGETS (прочитать строку до разделителя строк). Далее каждую строку разбирать, например, ALINES (GETWORDNUM не очень удобен, когда разделитель ";" следует сериями, без пробелов/символов, но тоже можно, предварительно STRTRAN-ом заменив ";;" на "; ;").
Ratings: 0 negative/0 positive
Re: импорт из txt
vacikoff

Сообщений: 9
Дата регистрации: 29.03.2020
ssa
Инфа для размышлений:
Спасибо за подсказку!
ssa
Прелестно.
Как мне APPEND импортировать все строчки кроме строк начинающихся с # ?
Ratings: 0 negative/0 positive
Re: импорт из txt
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Добавить в APPEND FROM условие: FOR LEFT(myfield,1)#[#]
Ratings: 0 negative/2 positive
Re: импорт из txt
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
vacikoff
Как мне APPEND импортировать все строчки кроме строк начинающихся с # ?
Молча.
StrToFile(GetWordNum(FileToStr(MyFile), 6, '#'), 'MyFile.tmp')
APPEND FROM MyFile.tmp TYPE DELIMITED WITH "'" WITH CHARACTER ";"


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: импорт из txt
vacikoff

Сообщений: 9
Дата регистрации: 29.03.2020
StrToFile(GetWordNum(FileToStr(MyFile), 6, '#'), 'MyFile.tmp')
не сработало в фаил MyFile.tmp записалось цифра равная количеству записей, сами данные не перешли (


[code]StrToFile(GetWordNum(FileToStr(MyFile), 7, '#'), 'MyFile.tmp')
разобрался, так работает



Исправлено 2 раз(а). Последнее : vacikoff, 06.04.20 14:24
Ratings: 0 negative/0 positive
Re: импорт из txt
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Добавить в APPEND FROM условие: FOR LEFT(myfield,1)#[#]

Выдаст ошибку несовпадения типов, если поле не символьное.

vacikoff
StrToFile(GetWordNum(FileToStr(MyFile), 7, '#'), 'MyFile.tmp')

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

Почему у вас получилось 7 слов, а не 6, как в примере? Возможно, перед первым '#' в вашем файле находится один или несколько пробелов.
Ну и, скорее всего, такой способ дает одну лишнюю пустую запись, так как последнее слово будет начинаться с символов новой строки (их может отсечь LTRIM). То есть такой способ не слишком надёжен.

Например, я, глядя на ваш пример, сказал бы, что вам нужно не 6-е или 7-е слово, а последнее.

Да и на вариант с GetWordNum() я бы не стал полагаться, если нет гарантии, что символ '#' никогда не встретится в данных. Но вы об этом ничего не сообщаете.

Если же этот символ может быть только в шапке, но количество строк шапки произвольно, то я бы нашел последнее вхождение '#' в строку и записал в файл всё, что идет после него:
s = FILETOSTR(MyFile)
= STRTOFILE(SUBSTR(s, RAT('#',s)+3), 'MyFile.tmp')

И то так просто можно сделать только в том случае, если шапка обязательно заканчивается строкой с символом '#', за которым ничего не идет, кроме символов новой строки.
--------

Итого я голосую за самый простой вариант создания файла MyFile.tmp - построчное чтение исходного файла, анализ строки, запись строки, если нужно.

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



Исправлено 1 раз(а). Последнее : akvvohinc, 08.04.20 04:57
Ratings: 0 negative/0 positive
Re: импорт из txt
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
akvvohinc
Выдаст ошибку несовпадения типов, если поле не символьное.

Надо быть в изрядном подпитии, чтобы закачивать текст в несимвольное поле.
Ratings: 0 negative/0 positive
Re: импорт из txt
AndyNigmatec

Сообщений: 1550
Откуда: Волгоград
Дата регистрации: 28.06.2015
Simple777
Надо быть в изрядном подпитии, чтобы закачивать текст в несимвольное поле.

В военное время косинус может достигать и трех. (с)

Ratings: 0 negative/0 positive
Re: импорт из txt
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Надо быть в изрядном подпитии, чтобы закачивать текст в несимвольное поле.

А кто сказал, что в не символьное поле закачивается текст?

Я вижу, что импортируемые строки начинаются как раз с чисел.
Но даже если бы это было не так в этом конкретном случае, то такое решение - не решение, если зависит от того, какие данные вводятся.



Исправлено 1 раз(а). Последнее : akvvohinc, 08.04.20 17:53
Ratings: 0 negative/0 positive
Re: импорт из txt
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Универсальность не является самоцелью. Во всём нужен здравый смысл и целесообразность.

Мне приходится довольно много обрабатывать различных "входных данных", поступающих из сторонних источников.

Если б мне пришлось обрабатывать такого рода текст.

Очевидно, что в тексте есть заголовок с важными "входящими сведениями". Возможно, что в данном частном случае эти данные не имеют значения (не верю! ), но считать и обработать их - почему бы и нет? Поэтому первое поле я бы сделал символьным с размером по наибольшему заполнению строки, начинающейся с символа # и плюс ещё символов 10 "про запас". Остальные поля вполне могут быть и цифровыми, если там действительно всегда будут цифры (без спецсимволов).

Поэтому мной и было предложено очевидное и предельно прозрачное решение (даже человек, никогда не занимающийся программированием, догадается,"как это работает").
Вообще говоря, если вижу простые и прозрачные решения, то готов принести в жертву "универсальность".



Исправлено 3 раз(а). Последнее : Simple777, 08.04.20 18:30
Ratings: 0 negative/0 positive
Re: импорт из txt
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
Поэтому первое поле я бы сделал символьным с размером по наибольшему заполнению строки

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



Исправлено 1 раз(а). Последнее : akvvohinc, 08.04.20 18:59
Ratings: 0 negative/0 positive
Re: импорт из txt
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Для того и существует аналитическая часть, где уточняются нюансы. В любом случае экспортно-импортные операции дают свободу действий разработчику. Совсем не обязательно напрямую заполнять рабочие таблицы. Я нередко делаю достаточно подробную диагностику с выдачей протокола выявленных аномалий и косяков. И только после подтверждения пользователем данные заносятся в рабочие таблицы.



Исправлено 1 раз(а). Последнее : Simple777, 08.04.20 19:12
Ratings: 0 negative/0 positive
Re: импорт из txt
akvvohinc

Сообщений: 4201
Откуда: Москва
Дата регистрации: 11.11.2008
Simple777
В любом случае экспортно-импортные операции дают свободу действий разработчику.

Тогда эта тема вообще не представляет интереса - автору вполне хватило бы ответа, что построчно читать текстовый файл надо с помощью FGETS(), а не FREAD(), а в остальном у него полная свобода действий.
Ratings: 0 negative/0 positive
Re: импорт из txt
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Simple777
Очевидно, что в тексте есть заголовок с важными "входящими сведениями". Возможно, что в данном частном случае эти данные не имеют значения (не верю! ), но считать и обработать их - почему бы и нет? Поэтому первое поле я бы сделал символьным с размером по наибольшему заполнению строки, начинающейся с символа # и плюс ещё символов 10 "про запас".
А потом внезапно оказывается что в одном из этих "заголовочных полей" может встретиться символ ; который для остальной части файла является разделителем полей, и соответственно APPEND FROM и строки заголовка "порежет" на части
Для более-менее "произвольных" форматов файлов (включая "заголовки", или несколько таблиц разделённых, к примеру, пустой строкой или спец строкой типа кучи минусов) всё же имеет смысл писать парсер используя FGETS, или, если лимит на размер файлов имеется и он небольшой то FILETOSTR.
Далее уже при помощи антикварных AT/SUBSTR или более свежих ALINES, GETWORDNUM (он, кстати, раньше существовал в foxtools.fll под чуть другим именем - не удивлюсь если и в FPD-ных plb имеются его аналоги) разбирать строки на части и вручную же конвертировать в нужный вид числа/даты.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: импорт из txt
ssa

Сообщений: 12999
Откуда: Москва
Дата регистрации: 23.03.2005
Igor Korolyov
GETWORDNUM (он, кстати, раньше существовал в foxtools.fll под чуть другим именем - не удивлюсь если и в FPD-ных plb имеются его аналоги)
Конечно есть.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: импорт из txt
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Команда APPEND FROM TYPE вообще довольно "рискованная" в общем случае.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 10 (Гостей: 10)

© 2000-2024 Fox Club 
Яндекс.Метрика