Форум » GUI » Проблема с APPEND FROM » Ответить

Проблема с APPEND FROM

alex_II: Споткнулся на ровном месте, нужно загрузить в DBF-файл данные из текстового файла. Разделителем данных служит символ - ";" пример записи: bla-bla,28;5157;9.67;3;01/05/2011 использую команду: APPEND FROM (inTxt) DELIMITED WITH ";" Но указанный мной разделитель игнорируеться, а для разбиения используеться запятая. Не могу сообразить в чём ошибка, может кто подскажет или может поделитесь работающим примером. У меня идеи кончились

Ответов - 8

Pasha: Прежде всего, надо собрать prg с флагом -p, и в файле *.ppo посмотреть, правильно ли передается 3-й параметр функции __dbDelim

alex_II: Клиент в затылок дышит, нужно быстро выдать решение. Буду читать файл на низком уровне и сам разбирать строку по полям

SADSTAR2: если буквально верить синтаксису из хелпа [pre2]SYNTAX APPEND FROM <xcFile> [ FIELDS <idField list>] [<scope>] [ WHILE <lCondition>] [ FOR <lCondition>] [ SDF | DELIMITED [ WITH BLANK | <xcDelimiter>] | [ VIA <xcDriver>]] [/pre2] то надо писать [pre2]APPEND FROM (inTxt) DELIMITED ";" [/pre2] без WITH P.S. Хотя в std.ch написано так [pre2]#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.> )[/pre2] может попробовать вызвать напрямую функцию __dbDelim


Chikanuk: Из рабочей задачи: Mas2:=sInBox+"pmon2.csv" IF FILE(Mas2) APPEND FROM ( Mas2 ) ; FOR Upper( alltrim( InnR ) ) <> "INNR" ; DELIMITED WITH ( {'"', ';'} ) //// Пересоздадим индексы Set index to Pmon2, Pmon2c

AlexMyr: 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 ( {'"', ';'} ) а так работает.

alex_II: APPEND FROM (inTxt) DELIMITED ";" - вызывает синтаксическую ошибку Хотя и решил уже проблему через чтение строк функцией FReadStr, не поленился и проверил последний предложенный вариан: APPEND FROM ( inTxt) DELIMITED WITH ( {';'} ) Получил те же грабли В моем случае я читаю данные из текстового файла в досовкой кодировке и что проходит для csv-файла, в моём случае не работает.

AlexMyr: 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. А какая разница в какой кодировке ";"?

Chikanuk: 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.



полная версия страницы