Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2011, 21:32   #1
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию В Memo не выводится то что требуется!

Смысл программы это нахождение всех файлов с расширением *.mp3 в заданной директории и вывод Id3Tag инфы в мемо с последующим сохранением в txt! Проблема в том что мне нужно сначала вывести порядковый номер файла а после этого имя исполнителя и название трека в мемо но получается полная чепуха! Порядковый номер зашкаливает за тысячи с первого же трека а тире и название трека не выводятся вовсе! Ниже часть кода программы. Кто может помогите)
Код:
procedure Tform1.readID3Tag(FilePath: string);///Добавляет инфо в мемо

var
  FS: TFileStream;
  Buffer: array [1..64] of Char;
  Titel: string[30];
  Artist: string[30];
  i:integer;
begin
  FS := TFileStream.Create(FilePath, fmOpenRead or fmShareDenyWrite);
  try
    FS.Seek(-125, soFromEnd);
    FS.Read(Buffer, 64);
    begin
      inc (i);
      Titel := Copy(Buffer, 1, 30);
      Artist := Copy(Buffer, 34, 30);
      TagCr.Lines.Add(inttostr(i)+'.'+artist+' - '+titel);
    end;
  finally
    FS.Free;
  end;
end;

procedure Tform1.GetFiles( Path: string);///Ищет файлы с расширением *.mp3
 var
 sRec: TSearchRec;
 isFound: boolean;
 begin
 isFound := FindFirst( Path + '\*.*', faAnyFile, sRec ) = 0;
 while isFound do
 begin
 if ( sRec.Name <> '.' ) and ( sRec.Name <> '..' ) then
 begin
 if ( sRec.Attr and faDirectory ) = faDirectory then
 GetFiles( Path + '\' + sRec.Name);
 if pos('.mp3',copy(sRec.Name, length(sRec.Name)-3,4))=1 then begin
 readID3Tag(Path+'\'+sRec.Name);
 end;
 end;
 Application.ProcessMessages;
 isFound := FindNext( sRec ) = 0;
 end;
 FindClose( sRec );
 end;

Получается такая каша:
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 20.09.2011, 21:39   #2
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

В идеале должно быть так:
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 20.09.2011, 21:48   #3
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

попробуйте-ка вот так:
Код:
TagCr.Lines.Add(inttostr(TagCr.Lines.Count+1)+'.'+artist+' - '+titel);
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 20.09.2011, 21:50   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну с порядковым номером все ясно - переменная i в readID3Tag - пишет естественно чепуху. Передавайте номер п/п как параметр и считайте его в GetFiles. Насчет Titel и Artist - скорее всего не потому смещению считываете, разбирайтесь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.09.2011, 21:58   #5
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

переменная i должна быть или глобальной или как предложил Аватар передавать ее в функцию, SNUPY тоже дело написал.

еще обратил внимание что в этом условии лишнего напихал
if pos('.mp3',copy(sRec.Name, length(sRec.Name)-3,4))=1 then begin

проще ж так
if pos('.mp3',sRec.Name)>0 then begin

или так
if ExtractFileExt(sRec.Name)='.mp3' then
fate вне форума Ответить с цитированием
Старый 20.09.2011, 21:59   #6
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Код:
      Titel := Copy(Buffer, 1, 30);
      delete(Titel, pos(#0,Titel),29);
      Artist := Copy(Buffer, 31, 30);
      delete(Artist, pos(#0,Artist),29);
а переменную i объявите глобально и инициализируйте ее
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 20.09.2011, 22:16   #7
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

SNUPY Спасибо с числами помогло!
Аватар в GetFiles она пишет туже чепуху! Помог код который дал SNUPY Title и Artist считываю точно! Проверял по одному
Код:
TagCr.Lines.Add(titel);
TagCr.Lines.Add(artist);
отображается всё нормально;
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 20.09.2011, 22:19   #8
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

Step_UA Спасибо огромное помогло! Можешь объяснить для чего delete(Artist, pos(#0,Artist),29); ?
Всем кто принимал участие тоже огромное спасибо!
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Старый 20.09.2011, 22:25   #9
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

в файле находится так называемая ASCII-Z последовательность, 0 - признак конца строки. после простого копирования получится "нужная строка"#0#0...
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 20.09.2011, 23:16   #10
JasperCRT
Пользователь
 
Аватар для JasperCRT
 
Регистрация: 23.12.2010
Сообщений: 40
По умолчанию

Спасибо огромное за информацию!
Интернет как жизнь - смысла нет, а уходить не хочется!
JasperCRT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разъясните что требуется dr.Chas Общие вопросы по программированию, компьютерный форум 2 20.05.2011 21:56
Не выводится структура! Что не так? katushka-1990 Общие вопросы C/C++ 1 22.03.2010 19:17
Что лудше RichEdit или Memo для текстового редактора EugeneIsmatulin Общие вопросы Delphi 6 30.05.2009 09:14
Не могу понять, что требуется? Shuraken Общие вопросы Delphi 2 10.08.2007 11:41