Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
Внизcsv-файл и #0A Найти похожие ветки
← →
alex-ran (2003-08-18 15:35) [0]Уважаемые мастера, помогите разобраться со следующей проблемой.
Счета за мобильные переговоры с детальной распечаткой стали пересылать по мылу в виде csv-файла (фрагмент файла как его видит текстовый редактор):
Послуги Їноземного оператора (ПДВ 0%):,0.00
Рахунок по контракту,364.97
,,"ВихЇднЇ дзвЇнки ","UMC ", 80506606677,GOUMC ,01.07.2003
,,"ВихЇднЇ дзвЇнки ","Укра_на ", 805649155541,GOUKR ,01.07.2003
Как видите данные табличной структуры в нем перемешаны с текстовым мусором. Поэтому связываться с ним как с файлом БД в текстовом виде я не могу (или все-таки есть выход?),
Поэтому я попробовал читать его как текстовый и отлавливать строки начинающиеся на ",,". Но и это не вышло. При анализе я увидел что файл и начинается с #0A и далее их просто дофига. Объясните плиз, что происходит когда ReadLn натыкается на #0A и как это обойти, или есть какое-либо другое решение?
← →
mOOx_ (2003-08-18 15:38) [1]На сколько я помню, csv замечательно открывается в Ехеле выше 95-го...
← →
alex-ran (2003-08-18 15:41) [2]да, это так, было б в нем строк 20 для обработки я бы и не морочил голову ни себе ни людям. Но когда только табличных строк в нем более 10000 возникает желание обрабатывать их программно :)
← →
mOOx_ (2003-08-18 15:44) [3]Так а в чем собственно вопрос?
← →
alex-ran (2003-08-18 15:54) [4]открыть его как таблицу (с ttASCII) я не могу, в нем много простого текстового мусора, а не только табличные данные (см. фрагмент файла в вопросе), а когда пробую читать как текстовый построчно - ни фига не выходит, читаю так:
AssignFile(F, opnDlg.FileName);
Reset(F);
while not Eof(F) do
begin
Readln(F, S);
mm.Lines.Add(S);
end
при этом в mm: TRichEdit нифига!
← →
mOOx_ (2003-08-18 16:04) [5]А F как объявлено?
← →
alex-ran (2003-08-18 16:22) [6]как
F: TextFile;
кстати я тут обратил внимание что в ентом файле #0D нету перед #0A (кто из них возврат каретки, а кто перевод строки не помню, но по-моему #0D - возврат каретки:))
так что конкретизирую, насколько это фатально для ReadLn?
и ежели сильно, то как это обойти?
← →
mOOx_ (2003-08-18 16:24) [7]А если файл загнать в поток, а в RichEdit из этого потока считать?
← →
alex-ran (2003-08-18 16:27) [8]не знаю, но мне кажется разгадка проще намного должна быть
← →
kuchumovkv (2003-08-18 16:36) [9]Перевод каретки - #0D, все верно. По моему это не фатально для Readln, но я могу ошибаться. Попробуй испытанный мною годами способ - начинать читать все кривые файлы побайтно. Предвосхищая вопрос о скорости обработки - работает гораздо быстрее, чем кажется на первый взгляд. Универсально для любых файлов, как для бинарных с переменной или неизвестной длиной записи и структурой, для текста тоже подойдет.
P.S. dll-ками не балуешься? Ну, очень нужно спросить!
← →
VAleksey (2003-08-18 16:37) [10]Могу предложить только посимвольное считывание с анализом получаемой строки.
Т.е.
Читать до разделителя и писать в соответствующие поля какой - нибудь таблички, а потом обрабатывать.
PS
А ado не пробовал?
Помнится я прекрасно читал csv файлы с помощью ADOTable.
← →
VAleksey (2003-08-18 16:38) [11]Да. Точно. Если Excel правильно открывает файл, то ADOTable (с правильно настроенной строкой подключения), тоже прекрасно справиться.
← →
alex-ran (2003-08-18 16:57) [12]спасибо что откликнулись, но я опять напоминаю как подключиться к стандартному компоненту, если файл примерно такой? (структура повторяется многократно, разделитель ","):
"текстовый мусор, много :)"
"название переменной,VarN1
...
"название переменной,VarNM
,,VarK1,VarK2,...,VarKL //только это собственно мне и надо
...
,,VarK1,VarK2,...,VarKL
и т.д. в цикле для другого абонента
Неужели ADОTable с этим справится?
к kuchumovkv © к сожалению ДЛЛ-ки только в общеобразовательном плане
← →
VAleksey (2003-08-18 17:50) [13]
> alex-ran (18.08.03 16:57)
Если < Excel открывает нормально > To
Используем AdoTable;
Иначе
<Читать до разделителя и писать в соответствующие поля какой - нибудь таблички, а потом обрабатывать.>
← →
kuchumovkv (2003-08-18 18:00) [14]Насчет ДЛЛ - жаль, а так, то может действительно попробовать ADO?
Если правильно понял, тебе еще нужно и отобразить данные на форме. Не получится, так не получится, в этом деле кроме как методом проб и ошибок сложно. Иначе VAleksey прав, наверное, придестя импортить в какую-либо читабельную таблицу. Побитное чтение с записью в ДБФ-ку по 6 полям 30000 записей на Celeron 600 с убитой виндой у меня занимало минуты три. Не так уж и много, если разобраться.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.09.01;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c