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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 5 461

/ вопрос решён /

Здравствуйте, уважаемые эксперты!
Для получения ID3-Tag'ов использовал знания вот из этой статьи:
https://www.delphi-int.ru/articles/1/
но возникла вот такая абракадабра(в прикреплённом файле),
как от неё избавиться?

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

ierihon1 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 29 июня 2011, 14:46
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 44; последнее сообщение — 29 июня 2011, 16:45; участников в обсуждении: 4.

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 15:50 [#21]:

А нет. Её даже нету в Delphi XE.
Тогда проблема скорее всего в юникоде/анси.

Скорее всего код получающий теги неправильно что-то вытворяет.
Чисти код! Чисти код! Чисти код!
ierihon1

ierihon1 (статус: 1-ый класс), 29 июня 2011, 15:51 [#22]:

вот этот:
function readID3Tag(FileName: string): TID3Tag;
var
  FS: TFileStream;
  Buffer: array [1..128] of Char;
begin
  FS := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    FS.Seek(-128, soFromEnd);
    FS.Read(Buffer, 128);
    with Result do
    begin
      ID := Copy(Buffer, 1, 3);
      Titel := Copy(Buffer, 4, 30);
      Artist := Copy(Buffer, 34, 30);
      Album := Copy(Buffer, 64, 30);
      Year := Copy(Buffer, 94, 4);
      Comment := Copy(Buffer, 98, 30);
      Genre := Ord(Buffer[128]);
    end;
  finally
    FS.Free;
  end;
end;
?
Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 15:52 [#23]:

Замени ка вот это
type  
  TID3Tag = record  
    ID: string[3];  
    Titel: string[30];  
    Artist: string[30];  
    Album: string[30];  
    Year: string[4];  
    Comment: string[30];  
    Genre: Byte;  
  end;

На это:
type  
  TID3Tag = record  
    ID: ansistring[3];  
    Titel: ansistring[30];  
    Artist: ansistring[30];  
    Album: ansistring[30];  
    Year: ansistring[4];  
    Comment: ansistring[30];  
    Genre: Byte;  
  end;
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 15:53 [#24]:

И ещё

Buffer: array [1..128] of Char;

на

Buffer: array [1..128] of ansichar;
Чисти код! Чисти код! Чисти код!
ierihon1

ierihon1 (статус: 1-ый класс), 29 июня 2011, 15:53 [#25]:

уже пробовал...
Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 15:53 [#26]:

Может сработает.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 15:54 [#27]:

Блин.
Чисти код! Чисти код! Чисти код!
Вадим К

Вадим К (статус: Академик), 29 июня 2011, 15:54 [#28]:

Цитата (Gooddy):

Buffer: array [1..128] of ansichar;

о замене string на ansistring я писал выше, но об этом буфере забыл...
Галочка "подтверждения прочтения" - вселенское зло.
Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 15:54 [#29]:

Но менять не всё надо а только эти строчки. Попробуй ещё раз.
Чисти код! Чисти код! Чисти код!
ierihon1

ierihon1 (статус: 1-ый класс), 29 июня 2011, 15:54 [#30]:

а вот
Buffer: array [1..128] of ansichar;
помогло)))

29 июня 2011, 15:55: Статус вопроса изменён на решённый (изменил автор вопроса — ierihon1)

Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 15:57 [#31]:

Вадим К: мне тоже кажется, что проблема в юникоде, чтение из файла очень низкоуровневое, любая замена типа приведёт к ошибке.
Чисти код! Чисти код! Чисти код!
ierihon1

ierihon1 (статус: 1-ый класс), 29 июня 2011, 15:59 [#32]:

и ещё
type
  TID3Tag = record
    ID: string;
    Titel: string;
    Artist: string;
    Album: string;
    Year: string;
    Comment: string;
    Genre: Byte;
  end;
я оставил вот так, предупреждения чтобы никакие не вылазили
Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 16:00 [#33]:

ierihon1: а шкурки каким набором компонентов делал?
Чисти код! Чисти код! Чисти код!
ierihon1

ierihon1 (статус: 1-ый класс), 29 июня 2011, 16:01 [#34]:

какие шкурки? скины? AlphaControl
Вадим К

Вадим К (статус: Академик), 29 июня 2011, 16:02 [#35]:

Gooddy: Почему кажется? тут действительно проблема с преобразованием ansi->unicode. (если правильнее, то ansi=>UCS2).
Плюс делфи в многих местах сама делает преобразование строки и это вылазит боком для тех, кто думает, что делфи обязана все правильно преобразовать.
Галочка "подтверждения прочтения" - вселенское зло.
Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 16:02 [#36]:

Ну да. Skin = кожа, шкура.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 16:03 [#37]:

Вадим К: Я писал когда ierihon1 ещё не решил проблему. Тогда я не был уверен.

Я не работал на дельфи на таком низком уровне, поэтому у меня проблем рода unicode->ansi или наоборот не возникало.

Да и дельфи я больше не пользуюсь, нашёл опенсорсный аналог.
Чисти код! Чисти код! Чисти код!
ierihon1

ierihon1 (статус: 1-ый класс), 29 июня 2011, 16:04 [#38]:

ясно.. ну сейчас уже всё пашет и кстати обнаружились странные файлы у которых тэги "ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ" например такие))
Gooddy

Gooddy (статус: 3-ий класс), 29 июня 2011, 16:06 [#39]:

ierihon1: Просто не все пираты нормально расставляют теги =)
Чисти код! Чисти код! Чисти код!
ierihon1

ierihon1 (статус: 1-ый класс), 29 июня 2011, 16:07 [#40]:

да уж эти злодеи)

Страницы: [« Предыдущая] [1] [2] [3] [Следующая »]

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 26 апреля 2026, 00:01
Выполнено за 0.04 сек.