Текущий архив: 2003.04.24;
Скачать: CL | DM;
ВнизКак разбить строку на подстроки! Найти похожие ветки
← →
Officeman (2003-04-02 20:55) [0]Строка имеет вид:
s:="11111;22222;33333;44444;55555";
Програмно надо её разбить на
s1:="11111";
s2:="22222";
и тд..
как красиво сделать?
без использования SysUtils
с Уважением, ОфисМен
← →
Song (2003-04-02 21:21) [1]TStringList.CommaText
← →
Satirus (2003-04-02 21:25) [2]var List:TStringList;
begin
List:=TSringList.Create;
try
List:=s;
List.CommaText:=";";
//List[0] - "1111"; List[1] - "2222"
finally
List.Free;
end;
end;
← →
MBo (2003-04-02 21:29) [3]>Satirus
>List.CommaText:=";";
лихо ;)
Officeman
самый простой путь - StringReplace ; на , и Commatext
Если SysUtils кажется некошерным почему-то, достаточно применять Pos и другие строковые процедуры языка
← →
Song (2003-04-02 21:40) [4]Тогда уж лучше на #13#10 :)
← →
sniknik (2003-04-02 22:20) [5]чего придираетесь? ну ошибся чуток парень
но идея то правильная, проверьте
var List: TStrings;
begin
List:= TStringList.Create;
List.Delimiter:= ";";
List.DelimitedText:= "1111;2222;3333";
Label1.Caption:= List.Strings[0];
Label2.Caption:= List.Strings[1];
Label3.Caption:= List.Strings[2];
List.Free;
end;
← →
Officeman (2003-04-03 20:37) [6]спасибо.попробую
← →
Officeman (2003-04-03 21:10) [7]Покажите пожалуйста балбесу(то есть мне) как это делается.
Если не силдьно сложно напишите рабочий листинг.
При выполнениии последнего. Программа вылетает с сообщением - ошибка в мобуле. Я думаю правильно будет через pos.
Как это сделать???
с Уважением, ОфисМен
← →
Mike Kouzmine (2003-04-03 21:15) [8]pos
copy
delete
pos
copy
delete
....
Если число символов одинаковое
← →
sniknik (2003-04-03 21:48) [9]> Программа вылетает с сообщением - ошибка в мобуле
какая, ты их читаеш хоть? если они тебе не нужны то другие то не ты.
с кривыми руками и pos не поможет. а ошибка скорее всего выход за пределы массива. если так то делай ограничение на количество присвоений из List. типа
var List: TStrings;
begin
List:= TStringList.Create;
List.Delimiter:= ";";
List.DelimitedText:= Edit1.Text;
if List.Count >= 1 then Label1.Caption:= List.Strings[0];
if List.Count >= 2 then Label2.Caption:= List.Strings[1];
if List.Count >= 3 then Label3.Caption:= List.Strings[2];
List.Free;
end;
(если ошибка не та то приведи ее (по буквам срисуй) плиз, чтобы мне не мучатся угрызениями совести за нерабочий код ;О), и в дальнейшем меняй манеры в задавании вопросов)
← →
Evgeny (2003-04-05 07:01) [10]Можно и через Pos конечно, но тогда придется держать строковый массив для сохранения. Так что со TStrins гораздо проще в итоге выйдет.
← →
Officeman (2003-04-06 18:34) [11]Ошибка такая:
http://ufastorm.narod.ru/error.jpg
Помогите решить!
Лучше дайте другой способ. этот некатит. может руки кривые. может ещё чего.
с Уважением, ОфисМен
← →
Satirus (2003-04-06 18:49) [12]2Officeman (06.04.03 18:34)
типичная ошибка выхода за границы массива.
Тебе же сказали, проверяй на количество строк в тексте.
← →
Satirus (2003-04-06 19:13) [13]на рабочий код и не кумарь больше
procedure TForm1.Button1Click(Sender: TObject);
var s:Tstringlist;
s2,s1:string;
p,i:integer;
begin
s:=TStringList.Create;
try
s2:=edit1.Text;
while pos(";",s2)<>0 do begin
s.add(copy(s2,1,pos(";",s2)-1));
s1:=copy(s2,pos(";",s2)+1,maxint);
s2:=s1;
end;
for i:=0 to s.Count-1 do
memo1.Lines.Add(s[i]);
finally
s.Free;
end;
end;
← →
Satirus (2003-04-06 19:17) [14]patch
после цикла добавить следующую строку:
if s2<>"" then memo1.Lines.Add(s2);
← →
kaif (2003-04-06 21:22) [15]Посмотри в исходных текстах Delphi, как реализовано разбиение списка полей при вызове метода
TDataSet.Locate("field1;field2;field3;...
Я обычно использую нечто похожее на их прием.
Страницы: 1 вся ветка
Текущий архив: 2003.04.24;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.007 c