Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Обработка строки   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.028 c
15-1161508815
Cyrax
2006-10-22 13:20
2006.11.12
Патч для Promt XT Family от лицензионного соглашения


2-1161736729
Lex_!
2006-10-25 04:38
2006.11.12
Поля в ДБГриде


2-1162137894
vvh
2006-10-29 19:04
2006.11.12
Создание встроенного языка


2-1161619167
AlexanderMS
2006-10-23 19:59
2006.11.12
Расплывчатые иконки, и как с ними бороться.


15-1161717019
XeRoN
2006-10-24 23:10
2006.11.12
Помогите плиз!