Автор | Сообщение |
|
| |
Пост N: 50
Зарегистрирован: 12.07.06
|
|
Отправлено: 04.07.11 06:59. Заголовок: Проблема с APPEND FROM
Споткнулся на ровном месте, нужно загрузить в DBF-файл данные из текстового файла. Разделителем данных служит символ - ";" пример записи: bla-bla,28;5157;9.67;3;01/05/2011 использую команду: APPEND FROM (inTxt) DELIMITED WITH ";" Но указанный мной разделитель игнорируеться, а для разбиения используеться запятая. Не могу сообразить в чём ошибка, может кто подскажет или может поделитесь работающим примером. У меня идеи кончились
|
|
|
Ответов - 8
[только новые]
|
|
|
| Администратор
|
Пост N: 1977
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.07.11 08:02. Заголовок: Прежде всего, надо с..
Прежде всего, надо собрать prg с флагом -p, и в файле *.ppo посмотреть, правильно ли передается 3-й параметр функции __dbDelim
|
|
|
|
| |
Пост N: 51
Зарегистрирован: 12.07.06
|
|
Отправлено: 05.07.11 04:17. Заголовок: Клиент в затылок дыш..
Клиент в затылок дышит, нужно быстро выдать решение. Буду читать файл на низком уровне и сам разбирать строку по полям
|
|
|
|
| |
Пост N: 129
Зарегистрирован: 05.06.07
|
|
Отправлено: 05.07.11 08:49. Заголовок: если буквально верит..
если буквально верить синтаксису из хелпа SYNTAX APPEND FROM <xcFile> [ FIELDS <idField list>] [<scope>] [ WHILE <lCondition>] [ FOR <lCondition>] [ SDF | DELIMITED [ WITH BLANK | <xcDelimiter>] | [ VIA <xcDriver>]] то надо писать APPEND FROM (inTxt) DELIMITED ";" без WITH P.S. Хотя в std.ch написано так #command APPEND [FROM <(f)>] [FIELDS <fields,...>] ; [FOR <for>] [WHILE <while>] [NEXT <next>] ; [RECORD <rec>] [<rest:REST>] [ALL] ; [DELIMITED [WITH <*delim*>]] => ; __dbDelim( .F., <(f)>, <(delim)>, { <(fields)> }, ; <{for}>, <{while}>, <next>, <rec>, <.rest.> ) может попробовать вызвать напрямую функцию __dbDelim
|
|
|
|
| |
Пост N: 38
Зарегистрирован: 19.08.10
|
|
Отправлено: 05.07.11 10:03. Заголовок: Из рабочей задачи: ..
Из рабочей задачи: Mas2:=sInBox+"pmon2.csv" IF FILE(Mas2) APPEND FROM ( Mas2 ) ; FOR Upper( alltrim( InnR ) ) <> "INNR" ; DELIMITED WITH ( {'"', ';'} ) //// Пересоздадим индексы Set index to Pmon2, Pmon2c
|
|
|
|
| |
Пост N: 209
Зарегистрирован: 11.06.10
|
|
Отправлено: 05.07.11 11:23. Заголовок: alex_II пишет: Спот..
alex_II пишет: цитата: | Споткнулся на ровном месте, нужно загрузить в DBF-файл данные из текстового файла. |
| Ну, как бы к разделу GUI тема не относится, нужно перенести в соответствующий раздел. Попробывал на harbour действительно не работает с ";". SADSTAR2 пишет: цитата: | то надо писать APPEND FROM (inTxt) DELIMITED ";" без WITH |
|
. Выдает: a1.prg(6) Error E0030 Syntax error "syntax error at 'FROM'" SADSTAR2 пишет: цитата: | может попробовать вызвать напрямую функцию __dbDelim |
| Вызывал напрямую, результат тот же - не принимает ";" Chikanuk пишет: цитата: | DELIMITED WITH ( {'"', ';'} ) |
| а так работает.
|
|
|
|
| |
Пост N: 52
Зарегистрирован: 12.07.06
|
|
Отправлено: 05.07.11 11:35. Заголовок: APPEND FROM (inTxt) ..
APPEND FROM (inTxt) DELIMITED ";" - вызывает синтаксическую ошибку Хотя и решил уже проблему через чтение строк функцией FReadStr, не поленился и проверил последний предложенный вариан: APPEND FROM ( inTxt) DELIMITED WITH ( {';'} ) Получил те же грабли В моем случае я читаю данные из текстового файла в досовкой кодировке и что проходит для csv-файла, в моём случае не работает.
|
|
|
|
| |
Пост N: 210
Зарегистрирован: 11.06.10
|
|
Отправлено: 05.07.11 11:42. Заголовок: alex_II пишет: посл..
alex_II пишет: цитата: | последний предложенный вариан: APPEND FROM ( inTxt) DELIMITED WITH ( {';'} ) Получил те же грабли |
| Нужно именно, как сказал Chikanuk пишет: цитата: | DELIMITED WITH ( {'"', ';'} ) |
| alex_II пишет: цитата: | В моем случае я читаю данные из текстового файла в досовкой кодировке и что проходит для csv-файла, в моём случае не работает. |
| опять же вопрос - на чем пишеш? Для harbour синтакс такой (из std.ch): #command APPEND [FROM <(f)>] [FIELDS <fields,...>] ; [FOR <for>] [WHILE <while>] [NEXT <next>] ; [RECORD <rec>] [<rest:REST>] [ALL] ; [DELIMITED [WITH <*delim*>]] [CODEPAGE <cp>] => ; __dbDelim( .F., <(f)>, <(delim)>, { <(fields)> }, ; <{for}>, <{while}>, <next>, <rec>, <.rest.>, <cp> ) есть CODEPAGE. А какая разница в какой кодировке ";"?
|
|
|
|
| |
Пост N: 39
Зарегистрирован: 19.08.10
|
|
Отправлено: 05.07.11 13:28. Заголовок: DELIMITED WITH ( {..
DELIMITED WITH ( {'"', ';'} ) {"", - ограничитель содержимого поля (если значения в файле в кавычках - то {' " ',) ';'} - разделитель полей csv - comma separated value / значения, разделенные запятыми. То есть текстовый файл. Кодировка роли не играет. Конвертнуть не проблема. К тому же автоматом переводится в указанную для таблиц. Указанный мной пример грузит данные из такого файла: Изосорбида мононитрат;Эфокс 20 таблетки № 50 20 мг;Шварц Фарма АГ (Германия);Шварц Фарма АГ (Германия);;204.40;8.00;3066.00;"7019002, 8000101, 8095805, 8062801";54;;0;10 шт., упаковки ячейковые контурные (5) - пачки картонные;П N011548/01;38744;666109;472;0;2;2010;5;0.00;0.00 Выгрузка - аналогично //--------------------------------------------- Select Zakaz DirChange(sOutBox) COPY TO (sZakazFileName) ; //FIELDS "Artikul", "Name", "Quantity", "Price", "SummaZakaz"; For ( Zakaz->Quantity > 0 ); DELIMITED WITH ( {"", ";"} ) Где нарыл про 2 (!!!) необходимых параметра - уже не вспомню (как бы не в исходниках), но работает именно только так. Использую Harbour.
|
|
|
|