Форум: "Начинающим";
Текущий архив: 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.014 c