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

Вниз

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

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

Наверх




Память: 0.49 MB
Время: 0.045 c
15-1149849883
Сергей М.
2006-06-09 14:44
2006.07.09
Проблема с UDATE.COM


1-1148621999
nopox
2006-05-26 09:39
2006.07.09
Доброго времени суток, Господа! проблема с IXMLDocument


9-1124984956
Dgt
2005-08-25 19:49
2006.07.09
Формулы Opengl


4-1144055290
antonn
2006-04-03 13:08
2006.07.09
проблемы с DrawText()


3-1147331804
dest81
2006-05-11 11:16
2006.07.09
доступ к сереверу через интернет