![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как разделить строку (логины) по разделителю запятая?
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 с результатом