Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.04.24;
Скачать: [xml.tar.bz2];

Вниз

Как разбить строку на подстроки!   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
3-76788
Andrey V.
2003-04-03 06:40
2003.04.24
Appolo / Halycon / Titan / ...


1-76892
SammIk
2003-04-08 13:24
2003.04.24
Длинна процедуры


8-77031
NetKnight
2003-01-11 15:45
2003.04.24
MMTools


3-76851
Abrams
2003-04-08 09:10
2003.04.24
BDE


1-77007
Mop
2003-04-14 04:04
2003.04.24
TTreeView - правая кнопка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский