powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт из текстового файла
18 сообщений из 18, страница 1 из 1
Импорт из текстового файла
    #34126238
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы услышать мнение сообщества. Провожу вставку записей из txt файла. И для изменения одного поля в таблице использую следующий метод (из-за скорости, а именно быстрого решения проблемы типов полей). В таблицах только Numeric,Char,Integer других типов нет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
ON ERROR ll_foxerror=.T.

ll_foxerror=.F.
REPLACE mytable.field1 WITH VAL(txtvalue)

IF (ll_foxerror) THEN
REPLACE mytable.field1 WITH txtvalue
ll_foxerror=.F.
ENDIF

ON ERROR





ll_foxerror=.F.
ENDIF[src][/SRC]
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34126396
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты бы сначала проверил КАК это будет работать.

Код: plaintext
1.
2.
3.
4.
create cursor test (f1 n( 10 ))
append blank
replace f1 with val('пример')
browse nowait

"Видишь суслика?" В смысле, наблюдаешь хоть какое-нибудь сообщение об ошибке? НЕТ!

FoxPro молча преобразует слово "пример" в число 0. Без какого-либо ссобщения об ошибке. Так работает функция VAL().

Значит, весь твой код, основанный на предположении , что возникнет ошибка - не имеет смысла. Просто НЕТ ошибки.

Так что, остается один путь: проверять предполагаемый тип данных "вручную". Генератор ошибок не поможет.
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34126427
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А наоборот. Просто в противном случае уж больно долго все идет.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ON ERROR ll_foxerror=.T.

ll_foxerror=.F.
REPLACE mytable.field1 WITH txtvalue

IF (ll_foxerror) THEN
REPLACE mytable.field1 WITH VAL(txtvalue)
ll_foxerror=.F.
ENDIF

ON ERROR


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

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

Посмотри синтаксис команды APPEND FROM ... DELEMITED. Она как раз берет данные из текстового файла и автоматически все раскладывает по нужным полям. Разумеется, если сам текстовый файл структурирован.
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34126662
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Текстовой файл структурирован. А именно [название поля]=[значение]. Он посути формируется по такой же таблице. В этом случае мой метод подходит?
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34126679
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pr0teusТекстовой файл структурирован. А именно [название поля]=[значение]. Он посути формируется по такой же таблице. В этом случае мой метод подходит?
Текстовый файл должен быть структурирован как таблица
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34126738
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Он и так по сути структурирован как таблица. Просто не все записи присутствуют.

[запись 1]
[названи поля 1]=[значение1]
[названи поля 2]=[значение2]
[запись 2]
[названи поля 1]=[значение1]
[запись 3]
[названи поля 1]=[значение1]
[названи поля 2]=[значение2]
[названи поля 3]=[значение3]

И вставка ведется REPLACE mytable.&[названи поля 1]. WITH [значение1]
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34126797
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pr0teusОн и так по сути структурирован как таблица. Просто не все записи присутствуют.

[запись 1]
[названи поля 1]=[значение1]
[названи поля 2]=[значение2]
[запись 2]
[названи поля 1]=[значение1]
[запись 3]
[названи поля 1]=[значение1]
[названи поля 2]=[значение2]
[названи поля 3]=[значение3]

И вставка ведется REPLACE mytable.&[названи поля 1]. WITH [значение1]
Ну если только таблицу на бок положить
Вот такого вида д.б. текстовый файл:
[значение1]<разделитель>[значение2] ... <разделитель>[значениеN]
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34126903
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открыть файл на низком уровне FOPEN() и анализировать его.
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34127047
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то не туда всех понесло 8) Файл есть, он структурирован, как показано выше, при его проходе выбирается поле и соответствующее ему значение. Вопрос заключался могу ли я применить такую конструкцию при модификации табличной записи.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ON ERROR ll_foxerror=.T.

ll_foxerror=.F.
REPLACE mytable.&[название поля из txt]. WITH [значение из txt]
IF (ll_foxerror) THEN
REPLACE mytable.&[название поля из txt]. WITH VAL([значение из txt])
ll_foxerror=.F.
ENDIF

ON ERROR

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

http://www.sql.ru/forum/actualthread.aspx?tid=361184#3392561

Структура очень похожа. Думаю, легко сможешь перестроится.
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34127181
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем так много?
REPLACE mytable.&[название поля из txt]. WITH IIF(TYPE([значение из txt])="N",VAL([значение из txt]),[значение из txt])
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34127288
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 AleksMed
Значение из txt всегда текст.
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34127304
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И что если символьное поле содержит только '0'
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34127359
Maltsev_MaxE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:-))

Анализируй не источник, а тип поля приемника !!!

Код: plaintext
1.
2.
Do Case
 case Type([названи поля  1 ])='N' then
  Replace  &[названи поля  1 ] with Val(Evaluate([значение1]))


и т. д.
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34127559
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pr0teus2 AleksMed
Значение из txt всегда текст.
Ты сначала попробуй и хелп по TYPE() почитай. :)
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34127914
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pr0teus2 AleksMed
Значение из txt всегда текст.

Код: plaintext
1.
2.
3.
4.
5.
lcText = "132465"
?m.lcText,"TYPE=", TYPE(m.lcText)

lcText = "пример"
?m.lcText, "TYPE=", TYPE(m.lcText)

Хотя использовать это надо крайне осторожно. А если текст совпадет с именем поля таблицы? Или переменной памяти?

Код: plaintext
1.
2.
3.
create cursor test (f1 D)
lcText = "f1"
?m.lcText, "TYPE=", TYPE(m.lcText)

Т.е., "в общем случае", я бы не советовал этим пользоваться.
...
Рейтинг: 0 / 0
Импорт из текстового файла
    #34129585
Pr0teus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Но я все же остановлюсь на своем методе. Или же на анализе поля приемника. Поле и так имеет заведомо корректное значение, т.к. выгружалось из такой же таблицы. Т.е. полю таблице четко соотвествует его значение, которое в него должно вставиться, только тип надо подменить (строковой или число).

P.S.
Текстовой файл у меня представляет документ XML, а парсинг ручками делаю через объект MSXML2.DOMDocument.3.0.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Импорт из текстового файла
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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