Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

Разбивка строки на несколько строк...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
1-79920
rulezz
2004-02-09 20:19
2004.02.25
как обрашатся к обьектам на веб?


3-79682
chtr
2004-01-30 09:11
2004.02.25
Как изменить порт доступа к MSSQL.


14-80206
JaoDaoDzen
2004-01-29 11:51
2004.02.25
дипрессия....


1-79933
ИМХО
2004-02-09 05:01
2004.02.25
Многострочное выделение в гриде


14-80152
dmk
2004-02-01 00:34
2004.02.25
HELP!!!