Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизОбработка строки Найти похожие ветки
← →
DiX © (2006-10-22 13:47) [0]К примеру есть строка
12:20 Вася-Петя 1.12 1.4 1.23 1.53
для преобразования ее в StringList использую следующее
StringList.Text:=StringReplace(S," ",#13#10,[rfReplaceAll]);
проблема в следующем: вместо Вася и Петя может быть Вася Пупкин и Петя Жопкин и преобразование происходит не правильно т.к. надо, чтобы Вася Пупкин и Петя Жопкин были в одной строке. Подскажите как быть.
← →
Ketmar © (2006-10-22 13:48) [1]разбирать строку руками. ага.
← →
Anatoly Podgoretsky © (2006-10-22 16:58) [2]Зачем же ты меняешь пробел между Вася и Пупкин?
← →
DiX © (2006-10-22 18:18) [3]Anatoly Podgoretsky
В том то и дело, что нужно, чтобы этот пробел игнорировался
← →
guav © (2006-10-22 18:45) [4]1.
StringList.Text:= StringReplace("12:20 "Вася Пупкин-Петя Жопкин" 1.12 1.4 1.23 1.53",#13#10,[rfReplaceAll]);
2.
StringList.Delimeter := "|";
StringList.DelimetedText := "12:20|Вася Пупкин-Петя Жопкин|1.12|1.4|1.23|1.53"
3.
> [1] Ketmar © (22.10.06 13:48)
> разбирать строку руками. ага.
← →
Loginov Dmitry © (2006-10-22 23:17) [5]guav © (22.10.06 18:45) [4]
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]);
Вообще, теперь я очень не рекомендую юзать свойство StringList.DelimetedText (дюже хлопот с ним много (нежелательная обработка пробелов, некорректная обработка символа """, стоящего в начале строки)).
← →
Palladin © (2006-10-23 06:32) [6]
> нежелательная обработка пробелов
не замечал, примерчик можно?
> екорректная обработка символа """, стоящего в начале строки)
QuoteChar:=#0;
← →
Loginov Dmitry © (2006-10-23 09:27) [7]> не замечал, примерчик можно?
procedure TForm1.Button1Click(Sender: TObject);
begin
with TStringList.Create do
begin
DelimitedText := "a b c";
ShowMessage(Text);
Free;
end;
end;
> QuoteChar:=#0;
Не знал :(
← →
Ketmar © (2006-10-23 12:39) [8]>[7] Loginov Dmitry(c) 23-Oct-2006, 09:27
>> не замечал, примерчик можно?
и что тут некорректного? не понял...
← →
Palladin © (2006-10-23 13:10) [9]TStringList разносит буквы в по строкам... скотина такая...
← →
Ketmar © (2006-10-23 13:27) [10]>[9] Palladin(c) 23-Oct-2006, 13:10
>TStringList разносит буквы в по строкам... скотина такая...
ой. а я думал, так и надо...
← →
default © (2006-10-23 13:43) [11]посмотрите код делимитедтекста
← →
Anatoly Podgoretsky © (2006-10-23 14:59) [12]
> ой. а я думал, так и надо...
Непрададо, надо что бы и а и ч разносил, а не только b
← →
Loginov Dmitry © (2006-10-24 00:00) [13]Ketmar © (23.10.06 12:39) [8]
и что тут некорректного? не понял...
Не верно. Я писАл нежелательная обработка пробелов. TStringList использует пробелы в качестве разделителя, хотим мы этого или нет. Это минус.
← →
Ketmar © (2006-10-24 00:19) [14]>[13] Loginov Dmitry(c) 24-Oct-2006, 00:00
>TStringList использует пробелы в качестве разделителя,
>хотим мы этого или нет. Это минус.
и всё, что меньше пробела -- тоже. решается путём "закавычивания" строк с пробелами. немного странная логика, но уж какая есть. %-)
← →
Германн © (2006-10-24 00:34) [15]
> немного странная логика, но уж какая есть.
Ну не такая уж она и странная, имхо. Раз "мать её так" тоже её придерживается. :-)
← →
Ketmar © (2006-10-24 00:39) [16]>[15] Германн(c) 24-Oct-2006, 00:34
>Ну не такая уж она и странная, имхо.
а вот для меня как раз странная. ну CR разделителем я понимаю. ну, LF. но пробел? зачем, если я это явно не указал???
← →
default © (2006-10-24 00:43) [17]логика не странная, а маразматичная, имо
← →
Германн © (2006-10-24 01:00) [18]
> а вот для меня как раз странная. ну CR разделителем я понимаю.
> ну, LF. но пробел? зачем, если я это явно не указал?
А вот ты о чём. Я не правильно понял [14].
Но и тут на мой взгляд странности нет. Присвоить TStringList.DelimetedText можно текстовую строку. Но, имхо общепринято, текстовая строка сама по себе не включает символы LF/CR. На листе отпечатанном на пишмашинке ты ведь их не видишь! :-)
← →
Anatoly Podgoretsky © (2006-10-24 09:43) [19]С логикой полный порядок, работает в соответствии CSV отсюда и CommaText и что из того
← →
Ketmar © (2006-10-24 09:51) [20]>[19] Anatoly Podgoretsky(c) 24-Oct-2006, 09:43
>С логикой полный порядок, работает в соответствии CSV
и вот где в справке упоминания о соответствии CSV? кстати, с какого испугу поля в CSV стали разделяться помимо запятых ещё и пробелами? фтопку программы, которые имеют такую логику. вместе с аффтарами.
← →
Anatoly Podgoretsky © (2006-10-24 12:24) [21]
> какого испугу поля в CSV стали разделяться помимо запятых
> ещё и пробелами?
Да по определению, а что бы такого не происходило надо брать в двойные кавычки. Поведение CommaText полностью этому соответствует. Смотри примеры в справке по теме.
← →
DiX © (2006-10-26 23:32) [22]
> 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 в день. Вы представляете сколько это займет времени.
← →
Ketmar © (2006-10-26 23:37) [23]>[21] Anatoly Podgoretsky(c) 24-Oct-2006, 12:24
>Да по определению
фигня полная. по определению поля разделяются запятыми. пробелы же должны игнорироваться, если строка не закавычена. более того, CR, LF и прочий мусор -- тоже. никакой "корректной поддержки CSV" здесь и в помине нет. так что не будем приплетать CSV к мухоморным глюкам борланда.
← →
Ketmar © (2006-10-26 23:37) [24]upd: ведущие и завершающие пробелы, натурально.
← →
Ketmar © (2006-10-26 23:38) [25]э-э-э... про CR/LF немного ошибся. они могут быть в закавыченых строках -- тогда они часть поля. иначе -- разделитель записей.
← →
Anatoly Podgoretsky © (2006-10-26 23:47) [26]Не фигня, тебе кто то мозги запудрил. Точное определение - значения разделяются запятыми и пробелами, если значение содержит пробелы, то значение надо брать в двойные кавычки, даты и числа брать в кавычки не требуется.
Вот что правда, то что бардака тут много, у всех свои понятия, что такое CSV файлы, ты только посмотри как работают подобные файлы у Экселе и будешь удивлен, разница наблюдается даже при чтении и записи.
Я не даю точное определение, слишком давно его читал, привожу по памяти, а иследования поведения CSV файлов есть в моей статье по файлам на Королевстве Дельфи или на моем сайте, в разделе DDP
Ты уж поверь я давно с этим работаю и потратил в свое время на поиск руководящих документов.
Иделальный формат, который соответствует точным ограничением, это
Число, "строка символов", дата
Но CSV, по крайней мере у тех продуктов, которые слышали про стандартизацию это отработает точно, это отработает и более нормально и в Эксела, только поведение при открытии будет разное. Но требования к кавычкам и пробелам у всех одинаковое и Борланд в своем Comma[Separated Value]Text следует этим стандартам.
С датой не все одназначно. Отдельные могут принять дату как дату или без кавычек, некоторые только в кавычках, а некоторые вообще за дату не примут.
← →
Ketmar © (2006-10-26 23:58) [27]>[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-27 00:01) [28]
> я вёл речь про "Кэтмару взглючилось". %-)
Я за тебя не отвечаю :-)
Я и за себя не всегда отвечаю.
← →
Anatoly Podgoretsky © (2006-10-27 00:02) [29]
> или запятые -- в кавычках.
Ой про это то я и забыл. Поспать что ли?
← →
Anatoly Podgoretsky © (2006-10-27 00:03) [30]В общем именно это и есть главное, есть пробелы или запятые бери в кавычки и это поведению соответствует поведение Борланда.
Он не допустил здесь промахов, вот только наши ожидания не всегда оправдываются.
← →
Ketmar © (2006-10-27 00:13) [31]>[30] Anatoly Podgoretsky(c) 27-Oct-2006, 00:03
>В общем именно это и есть главное, есть пробелы или
>запятые бери в кавычки и это поведению соответствует
>поведение Борланда.
да, закавыченые строки они интерпретируют верно. не вопрос. а вот незакавыченые... впрочем, действительно: нечего пихать пробелы куда не попадя. хотя, имо, логичней их всё-таки игнорировать. %-)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.043 c