|
Вопрос # 3 167/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Есть текст такого вида: (именно такого, точь в точь)
*.cda
*.flac;*.fla
*.midi;*.mid;*.rmi;*.kar
*.wma
*.wv
*.aac
*.ac3
*.adx
*.m4a
*.ape;*.mac
*.mpc;*.mp+;*.mpp
*.ofr;*.ofs
*.spx
*.tta
Как можно добавить каждое расширение в List box, тоесть чтобы было так
.cda
.flac
.fla
.midi
и т д
то есть опуская звездочки и точки с запятой... я попытался реализовать так, что он функцией Pos ищет точку, запоминает ее положение, ищет точку с запятой, запоминает ее положение, копирует в новую строчку все то что между первым и вторым положением, и зразу это удаляет, и идет дальше искать, мне кажется это очень муторно, и почему то это не работает :) Подскажите пожалуйста как это можно реализовать :)
 |
Вопрос задал: BloodVIRUS (статус: Посетитель)
Вопрос отправлен: 9 сентября 2009, 21:10
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Мережников Андрей
Здравствуйте, BloodVIRUS!
listbox1.items.loadfromfile('имя файла');
listbox1.items.text:=AnsiReplaceStr(listbox1.items.text,';',#10#13);
 |
Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 9 сентября 2009, 21:38
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, BloodVIRUS!
Можно, просто и красиво:) суть в том, что бы заменить точку с запятой на перевод строки.
var sl:TStringList;
s:string;
begin
sl := TStringList.create;
sl.LoadFromFile('file.ext');//или с другого места подгружаем данные.
s := sl.text;
sl.free;
s := ReplaceString(s, ';',#13#10, [rfReplaceAll]);
ListBox1.Text := s;
Вроде не сделал ошибок.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 9 сентября 2009, 21:41
|
Ответ #3. Отвечает эксперт: min@y™
Ну, где-то примерно так:
procedure ExtentionsToListBox(AText: TStrings; AListBox: TListBox);
var
Index, j: Integer;
Temp: TStringList;
begin
AListBox.Clear();
Temp:= TStringList.Create;
try
Temp.Delimiter:= ';';
for Index:= 0 to AText.Count - 1 do
begin
Temp.DelimitedText:= AText[Index];
for j:= 0 to Temp.Count - 1 do
AListBox.Items.Add(ExtractFileExt(Temp[j]));
end;
finally
Temp.Free();
end;
end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 9 сентября 2009, 21:46
Оценка за ответ: 5
Комментарий к оценке: безупречно )
|
Мини-форум вопроса
Всего сообщений: 5; последнее сообщение — 10 сентября 2009, 05:37; участников в обсуждении: 4.
|
IlluminatI (статус: 2-ой класс), 9 сентября 2009, 21:25 [#1]:
Привет BloodVIRUS!
Уверен, эксперты подскажут более эффективный код, но, все же, мое решение:
вот ваш файл (с расставленными ";"):
*.cda;
*.flac;*.fla;
*.midi;*.mid;*.rmi;*.kar;
*.wma;
*.wv;
*.aac;
*.ac3;
*.adx;
*.m4a;
*.ape;*.mac;
*.mpc;*.mp+;*.mpp;
*.ofr;*.ofs;
*.spx;
*.tta;
--------
Кидаем на форму Мемо1, Лист Бокс, и кнопку. Пишем такой код в OnClick для кнопки:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
s, st: string;
begin
Memo1.Lines.LoadFromFile('<имя файла>.txt');
s:=Memo1.Text;
while pos('*',s)>0 do
delete(s, pos('*',s),1);
while pos(#13#10,s)>0 do
delete(s,pos(#13#10,s),2);
while pos('.',s)>0 do
begin
st:=Copy(s,pos('.',s),pos(';',s)-1);
delete(s,pos('.',s),pos(';',s));
ListBox1.Items.Add(st);
st:='';
end;
end;
|
|
Мережников Андрей (статус: Абитуриент), 9 сентября 2009, 21:39 [#2]:
упс, перепутал местами #10 и #13
|
|
Вадим К (статус: Академик), 9 сентября 2009, 21:44 [#3]:
вот я не помню, функция AnsiReplaceStr заменяет только первое вхождение или все?
И я бы не рекомендовал привыкать явно в Ansi функциям. делфи 2009 и 2010 уже есть и потом всплывут проблемы с юникодом.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Мережников Андрей (статус: Абитуриент), 10 сентября 2009, 05:37 [#5]:
to Вадим К - AnsiReplaceStr заменяет все вхождения. А по поводу юникода - Вы правы.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|