Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


WebSqlNeederr ©   (2006-06-17 18:36:00) 

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

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;

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

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

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

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

Почему?


novill   (2006-06-19 11:18:00) [1]


> WebSqlNeederr

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


tButton   (2006-06-18 01:57:00) [2]


> 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;


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

sl.Add(Trim(bs));


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

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


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


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

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


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

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


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

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


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

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

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

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

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


tButton   (2006-06-17 19:26:00) [8]

пройтись по всем строкам и порезать пробелы
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 19:10:00) [9]

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


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

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1150475321&n=18


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

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

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


tButton   (2006-06-17 18:47:00) [12]

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 с результатом


Наверх

Титульная страница Поиск, карта сайта Написать письмо