Главная страница
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.028 c
6-1141709508
rOOse
2006-03-07 08:31
2006.07.09
Парсинг Url a


1-1148800591
serg128
2006-05-28 11:16
2006.07.09
Как сконвертить строку в base64?


2-1151031762
nickhilo
2006-06-23 07:02
2006.07.09
Компонент RichEdit с полноценной поддержкой формата RTF.


2-1150721495
novill
2006-06-19 16:51
2006.07.09
Как узнать длину записи в пикселах написи в визуальном компоненте


15-1150119141
[wl]
2006-06-12 17:32
2006.07.09
оффлайн-клиент IPB-форума