Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.047 c
15-1161580480
Бугага
2006-10-23 09:14
2006.11.12
В мире есть 10 категорий людей: те, кто знает двоичное исчисление


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


2-1161758334
yel
2006-10-25 10:38
2006.11.12
GLScene хочет Python_d7 и dws2Runtime


15-1161854336
Delphi)basic
2006-10-26 13:18
2006.11.12
Как в Java создать savepoint ?


2-1161778513
kirillrepin
2006-10-25 16:15
2006.11.12
tray с использованием rxlib





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский