Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

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 уже есть и потом всплывут проблемы с юникодом.
Галочка "подтверждения прочтения" - вселенское зло.
BloodVIRUS

BloodVIRUS (статус: Посетитель), 9 сентября 2009, 22:13 [#4]:

Всем огромное спасибо за столь скорые ответы :) Помогло :)
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 10 сентября 2009, 05:37 [#5]:

to Вадим К - AnsiReplaceStr заменяет все вхождения. А по поводу юникода - Вы правы.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:32
Выполнено за 0.03 сек.