Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Вниз

Как разделить строку (логины) по разделителю запятая?   Найти похожие ветки 

 
WebSqlNeederr   (2006-06-17 18:36) [0]

Есть у меня примерчик - он все хорошо делает, но кроме запятой как разделителя он еще и пробел почему то считает за разделитель:

procedure TForm1.Button2Click(Sender: TObject);
var sl: TStringList;
begin
   sl:=TStringList.Create;
   sl.Delimiter := ",";
   sl.DelimitedText := memo1.Text;
   memo2.Text:=sl.Text;
   sl.Destroy;
end;

То есть на форме есть две Мемо - в первую я ввожу текст (логины), которые между собой разделены запятыми, а во второй мемо уже должны сами логины в каждой строчке появляться. Так вот если в логине есть пробел то оно разбивает логин на две части :(

Пример текста, который мне нужно разбить:

...,мотылёк, Оксана К., Олюська, Скромняга,...

Так вот например логин "Оксана К." оно разбивает на две строчки "Оксана" и "К."

Почему?


 
tButton ©   (2006-06-17 18:47) [1]

sl:=tStringList.Create;
bs:="";
while length(ss)>=1 do begin
 if ss[1]="," then begin
   sl.Add(bs);
   bs:="";
 end else begin
   bs:=bs+ss[1];
 end;
 Delete(ss, 1, 1);
end;
sl.Add(bs);


ss - исходная строка
bs - буфер для хранения считаой части строки
sl - tStringList с результатом


 
WebSqlNeederr   (2006-06-17 18:55) [2]

Спасибо. Работает.

Только вот почему то теперь в начале почти каждой строки возникает пробел.


 
Пусик ©   (2006-06-17 19:05) [3]

http://delphimaster.net/view/2-1150475321/


 
WebSqlNeederr   (2006-06-17 19:10) [4]

Там вопрос пробела в начале строки не обсуждался


 
tButton ©   (2006-06-17 19:26) [5]

пройтись по всем строкам и порезать пробелы
if sl.Count>0 then
for i:=0 to sl.Count-1 do
 while sl[i][1]=" " do Delete(sl[i], 1, 1);


 
WebSqlNeederr   (2006-06-17 20:37) [6]

А почему здесь

while sl[i][1]=" " do Delete(sl[i], 1, 1);

пишет мне ошибку

[Error] Unit1.pas(48): Constant object cannot be passed as var parameter


 
Пусик ©   (2006-06-17 20:39) [7]

> WebSqlNeederr   (17.06.06 19:10) [4]
> Там вопрос пробела в начале строки не обсуждался


"Вам шашечки или ехать?"

Твой вопрос там решен полностью.


 
WebSqlNeederr   (2006-06-17 21:30) [8]

Так а почему вот эта ошибка возникает?
[Error] Unit1.pas(48): Constant object cannot be passed as var parameter


 
Пусик ©   (2006-06-17 21:47) [9]

> Так а почему вот эта ошибка возникает?
> [Error] Unit1.pas(48): Constant object cannot be passed
> as var parameter


Потому что ты не можешь в таких функциях использовать свойства класса. Нужна переменная.


 
Silver... ©   (2006-06-18 00:47) [10]

sl.Add(Trim(bs));


 
tButton ©   (2006-06-18 01:57) [11]


> sl.Add(Trim(bs));

а в дельфях есть трим? =) я думал только в перле =)

> Так а почему вот эта ошибка возникает?

потому что нужно учесть то что говорит компилятор и переписать код, например, вот так
if sl.Count>0 then
for i:=0 to sl.Count-1 do begin
 bs:=sl[i];
 while bs[1]=" " do Delete(bs, 1, 1);
 sl[i]:=bs;
end;


 
novill ©   (2006-06-19 11:18) [12]


> WebSqlNeederr

Есть еще вариант с помощью StringList.CommaText . Только нужно добвать
проверку на наличие в строке символа кавычек. (при наличии удвоить их)
...
StringList..CommaText:="""+StringReplace(<ваша строка>,",","","",[rfReplaceAll])+""";
...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.009 c
1-1148865389
shake-c
2006-05-29 05:16
2006.07.09
Окно в потоке delphi


2-1150509587
fantasy
2006-06-17 05:59
2006.07.09
SQL


2-1150339171
Василий
2006-06-15 06:39
2006.07.09
Запуск внешнего приложения внутри формы.


2-1150969625
Neket
2006-06-22 13:47
2006.07.09
Дата


1-1148550877
webpauk
2006-05-25 13:54
2006.07.09
Вставить gif в Richedit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский