![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка строки [D7, WinXP]
DiX © (2006-10-22 13:47:00)К примеру есть строка
12:20 Вася-Петя 1.12 1.4 1.23 1.53
для преобразования ее в StringList использую следующее
StringList.Text:=StringReplace(S,' ',#13#10,[rfReplaceAll]);
проблема в следующем: вместо Вася и Петя может быть Вася Пупкин и Петя Жопкин и преобразование происходит не правильно т.к. надо, чтобы Вася Пупкин и Петя Жопкин были в одной строке. Подскажите как быть.
Ketmar (2006-10-27 00:13:00) [1]>[30] Anatoly Podgoretsky(c) 27-Oct-2006, 00:03
>В общем именно это и есть главное, есть пробелы или
>запятые бери в кавычки и это поведению соответствует
>поведение Борланда.
да, закавыченые строки они интерпретируют верно. не вопрос. а вот незакавыченые... впрочем, действительно: нечего пихать пробелы куда не попадя. хотя, имо, логичней их всё-таки игнорировать. %-)
Anatoly Podgoretsky (2006-10-27 00:03:00) [2]В общем именно это и есть главное, есть пробелы или запятые бери в кавычки и это поведению соответствует поведение Борланда.
Он не допустил здесь промахов, вот только наши ожидания не всегда оправдываются.
Anatoly Podgoretsky (2006-10-27 00:02:00) [3]
> или запятые -- в кавычках.
Ой про это то я и забыл. Поспать что ли?
Anatoly Podgoretsky (2006-10-27 00:01:00) [4]
> я вёл речь про "Кэтмару взглючилось". %-)
Я за тебя не отвечаю :-)
Я и за себя не всегда отвечаю.
Ketmar (2006-10-26 23:58:00) [5]>[26] Anatoly Podgoretsky(c) 26-Oct-2006, 23:47
>Не фигня, тебе кто то мозги запудрил.
вот эта статья. %-)
http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm
только я не уверен, что есть программы, поддерживающие CSV такого вида. ну, кроме моих, конечно. %-)
>Вот что правда, то что бардака тут много, у всех свои
>понятия, что такое CSV файлы
к сожалению -- да. все знаю, что главное -- запятые. а остальное пишут как взглючится. %-)
>Ты уж поверь я давно с этим работаю и потратил в свое
>время на поиск руководящих документов.
верю. но, опять же -- я вёл речь не про "мерзкософту взглючилось". если уж быть точным -- я вёл речь про "Кэтмару взглючилось". %-)
но, имо, по вышеприведённой ссылке описание вполне логичное. более того, разбор по CSV этому описанию перекрывает практически все варианты CSV, которые я встречал.
>С датой не все одназначно.
да в CSV вообще типов нет никаких. всё проще: нет пробелов -- пиши без кавычек. есть пробелы или запятые -- в кавычках. %-)) остальное -- опять "взглюки" всяких сочинителей. %-)
Anatoly Podgoretsky (2006-10-26 23:47:00) [6]Не фигня, тебе кто то мозги запудрил. Точное определение - значения разделяются запятыми и пробелами, если значение содержит пробелы, то значение надо брать в двойные кавычки, даты и числа брать в кавычки не требуется.
Вот что правда, то что бардака тут много, у всех свои понятия, что такое CSV файлы, ты только посмотри как работают подобные файлы у Экселе и будешь удивлен, разница наблюдается даже при чтении и записи.
Я не даю точное определение, слишком давно его читал, привожу по памяти, а иследования поведения CSV файлов есть в моей статье по файлам на Королевстве Дельфи или на моем сайте, в разделе DDP
Ты уж поверь я давно с этим работаю и потратил в свое время на поиск руководящих документов.
Иделальный формат, который соответствует точным ограничением, это
Число, "строка символов", дата
Но CSV, по крайней мере у тех продуктов, которые слышали про стандартизацию это отработает точно, это отработает и более нормально и в Эксела, только поведение при открытии будет разное. Но требования к кавычкам и пробелам у всех одинаковое и Борланд в своем Comma[Separated Value]Text следует этим стандартам.
С датой не все одназначно. Отдельные могут принять дату как дату или без кавычек, некоторые только в кавычках, а некоторые вообще за дату не примут.
Ketmar (2006-10-26 23:38:00) [7]э-э-э... про CR/LF немного ошибся. они могут быть в закавыченых строках -- тогда они часть поля. иначе -- разделитель записей.
Ketmar (2006-10-26 23:37:00) [8]upd: ведущие и завершающие пробелы, натурально.
Ketmar (2006-10-26 23:37:00) [9]>[21] Anatoly Podgoretsky(c) 24-Oct-2006, 12:24
>Да по определению
фигня полная. по определению поля разделяются запятыми. пробелы же должны игнорироваться, если строка не закавычена. более того, CR, LF и прочий мусор -- тоже. никакой "корректной поддержки CSV" здесь и в помине нет. так что не будем приплетать CSV к мухоморным глюкам борланда.
DiX (2006-10-26 23:32:00) [10]
> StringList.Delimeter := '|';
> StringList.DelimetedText := '12:20|Вася Пупкин-Петя Жопкин|1.
> 12|1.4|1.23|1.53'
>
> Вряд-ли это сработает. Уж лучше так:
> StringList.Text:= StringReplace('12:20|Вася Пупкин-Петя
> Жопкин|1.12|1.4|1.23|1.53', '|',#13#10,[rfReplaceAll]);
Как я понял из ваших ответов все пробелы нужно заменять вручную. Проблема в том, что таких записей нужно обработать до 10000 в день. Вы представляете сколько это займет времени.
Anatoly Podgoretsky (2006-10-24 12:24:00) [11]
> какого испугу поля в CSV стали разделяться помимо запятых
> ещё и пробелами?
Да по определению, а что бы такого не происходило надо брать в двойные кавычки. Поведение CommaText полностью этому соответствует. Смотри примеры в справке по теме.
Ketmar (2006-10-24 09:51:00) [12]>[19] Anatoly Podgoretsky(c) 24-Oct-2006, 09:43
>С логикой полный порядок, работает в соответствии CSV
и вот где в справке упоминания о соответствии CSV? кстати, с какого испугу поля в CSV стали разделяться помимо запятых ещё и пробелами? фтопку программы, которые имеют такую логику. вместе с аффтарами.
Anatoly Podgoretsky (2006-10-24 09:43:00) [13]С логикой полный порядок, работает в соответствии CSV отсюда и CommaText и что из того
Германн (2006-10-24 01:00:00) [14]
> а вот для меня как раз странная. ну CR разделителем я понимаю.
> ну, LF. но пробел? зачем, если я это явно не указал?
А вот ты о чём. Я не правильно понял [14].
Но и тут на мой взгляд странности нет. Присвоить TStringList.DelimetedText можно текстовую строку. Но, имхо общепринято, текстовая строка сама по себе не включает символы LF/CR. На листе отпечатанном на пишмашинке ты ведь их не видишь! :-)
default (2006-10-24 00:43:00) [15]логика не странная, а маразматичная, имо
Ketmar (2006-10-24 00:39:00) [16]>[15] Германн(c) 24-Oct-2006, 00:34
>Ну не такая уж она и странная, имхо.
а вот для меня как раз странная. ну CR разделителем я понимаю. ну, LF. но пробел? зачем, если я это явно не указал???
Германн (2006-10-24 00:34:00) [17]
> немного странная логика, но уж какая есть.
Ну не такая уж она и странная, имхо. Раз "мать её так" тоже её придерживается. :-)
Ketmar (2006-10-24 00:19:00) [18]>[13] Loginov Dmitry(c) 24-Oct-2006, 00:00
>TStringList использует пробелы в качестве разделителя,
>хотим мы этого или нет. Это минус.
и всё, что меньше пробела -- тоже. решается путём "закавычивания" строк с пробелами. немного странная логика, но уж какая есть. %-)
Loginov Dmitry (2006-10-24 00:00:00) [19]Ketmar © (23.10.06 12:39) [8]
и что тут некорректного? не понял...
Не верно. Я писАл нежелательнаяобработка пробелов. TStringList использует пробелы в качестве разделителя, хотим мы этого или нет. Это минус.
Anatoly Podgoretsky (2006-10-23 14:59:00) [20]
> ой. а я думал, так и надо...
Непрададо, надо что бы и а и ч разносил, а не только b