Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизРазбивка строки на несколько строк... Найти похожие ветки
← →
ALF (2004-02-13 00:44) [0]Здравствуйте. Я хочу сделать следующее:
например, в ini-файле есть раздел с параметром:
[section]
code=903|905|095
Я хочу считать строку 903|905|095 и разбив ее на отдельные строки: 903, 905, 095 засунуть в ComboBox как три строки. Делаю следующее:
var codes: string;
i: integer;
a: string;
begin
a:="";
Combobox2.Items.Clear;
codes:=ini.ReadString("section", "code", "");
for i:=1 to length(codes) do
begin
if pos("|",codes)=i then
begin
ComboBox2.Items.Add(a);
a:="";
end;
a:=a+copy(codes,i,1);
end;
end;
В результате в ComboBox вносится только первая строка: 903
Что не так?
← →
DDA (2004-02-13 01:38) [1]Ну дак и правильно.
условие if pos("|",codes)=i всегда показывает одно и тоже число
- номер позиции первого "|"
делай так если строка у тебя не заканчивается знаком "|"
var codes: string;
i: integer;
a: string;
begin
a:="";
Combobox1.Items.Clear;
codes:="605|520|145";
i:=1;
while i<>length(codes)+2 do
begin
if (codes[i]="|") or (i=length(codes)+1) then
begin
ComboBox1.Items.Add(a);
a:="";
end
else a:=a+codes[i];
inc(i);
end;
end;
или так - если в конце строки стоит знак "|"
var codes: string;
i: integer;
a: string;
begin
a:="";
Combobox1.Items.Clear;
codes:="605|520|145|";
i:=1;
while i<>length(codes)+1 do
begin
if codes[i]="|" then
begin
ComboBox1.Items.Add(a);
a:="";
end
else a:=a+codes[i];
inc(i);
end;
end;
← →
mfender (2004-02-13 01:41) [2]Вобщем, в приведенном тобой случае, строку нужно привести хотя бы к виду "903|905|095|". Потому что ты берешь очередной отрезок строки до вхождения "|". Поэтому как ни крути, по твоему коду "095" никак в комбу не попадет. В остальном твой код с небольшими изменениями будет выглядеть так (сам цикл):
for i:=1 to length(codes) do
begin
if not (copy(codes,i,1)="|") then a:=a+copy(codes,i,1)
else
begin
ComboBox1.Items.Add(a);
a:="";
end;
end;
← →
Rouse_ (2004-02-13 01:44) [3]StringReplace, как я понял не подходит? ;)
← →
mfender (2004-02-13 01:55) [4]Вопрос был "что не так?" Надо думать, в приведенном коде...
← →
Defunct (2004-02-13 02:00) [5]mfender © (13.02.04 01:41) [2]
Мона еще проще:
И для текущего формата строки 903|905|095
for i:=1 to length(codes) do
begin
If not codes[i]="|") Then a:=a+codes[i] Else
Begin
ComboBox1.Items.Add(A);
a:="";
End; // elseif
If A<>"" Then ComboBox1.Items.Add(A);
End;
← →
Defunct (2004-02-13 02:01) [6]> If not codes[i]="|") Then a:=a+codes[i] Else
ех, скобочку забыл удалить ;>
If not codes[i]="|" Then a:=a+codes[i] Else
← →
mfender (2004-02-13 02:10) [7]У меня D5...
← →
Defunct (2004-02-13 03:26) [8]Ну и?
тип String это массив символов независимо от версии Delphi.
← →
mfender (2004-02-13 03:48) [9]Согласен. Это у меня были мысли вслух. Я не о том подумал. Спать охота, а еще работать и работать... А утром опять же на работу идти.
← →
ALF (2004-02-13 14:54) [10]Спасибо всем, попробую!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c