Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1227 connectés 

  FORUM HardWare.fr
  Programmation

  [Delphi] petage de plomb avec un Pchar

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Delphi] petage de plomb avec un Pchar

n°84936
drlobo
Posté le 30-12-2001 à 11:53:20  profilanswer
 

je suis en train de devenir fou!! :crazy:  
 
j'essaie de lire dans un mp3 les tags id3v2 (donc taille variable)
j'ai fais toutes les routines qui trouvent les tag et les tailles des champs, jusqu'a la pas tres compliqué tous est en taille fixe.
Mainteant pour récuperer les valeurs je fais ca:
 
var
 Buffer:PChar;
 temp:string;
 taille:integer;
 
GetMem(Buffer,taille);
mp3.ReadBuffer(Buffer^,taille);
 
le probleme c'est que je n'arrive pas exploiter le contenu de Buffer! :pt1cable:  
 
premiere chose: Buffer n'est pas vide j'arrive a voir ce qu'il y a dedans en faisant
 
for j:=1 to taille do
 memo2.Text:=memo2.Text+Buffer[j];
 
Par contre si je fais ca:
memo2.text:=Buffer
OU memo2.text:=Buffer^
OU temp:=Buffer
OU setString(temp,Buffer,Taille)
OU for j:=1 to taille do
 temp:=temp+Buffer[j];
 
et ben y a rien!! :pt1cable:  
on pourrait m'expliquer ce qui va pas?
tous ce que je veux c'est recuperer le Buffer dans un string...

mood
Publicité
Posté le 30-12-2001 à 11:53:20  profilanswer
 

n°84937
[SDF]Poire
Vive Grumly
Posté le 30-12-2001 à 12:07:50  profilanswer
 
n°84941
drlobo
Posté le 30-12-2001 à 12:22:55  profilanswer
 

je suis allé voir sur le site et j'ai pas trouvé de reponse a ma question.
Il y a bien un truc sur la lecture des tag id3 mais version 1 et donc avec taille définie ce qui dans mon cas ne pose pas de probleme.

n°84947
antp
Super Administrateur
Champion des excuses bidons
Posté le 30-12-2001 à 12:48:06  profilanswer
 

c'est très bizarre cette histoire.
tu utilises quoi pour le fichier ?
J'utilise TFileStream, et ca marche très bien.  
Exemple tiré de mon code source, pour une fonction locale à une autre fonction, et que j'utilise pour lire la chaine suivante dans un fichier où il y a des enregistrement de longueur variable (4 octets donnant la longueur, suivis par les caractères). intsize est un const valant sizeof(integer)
 

Code :
  1. recsize: integer;
  2.   field: PChar;
  3.   function ReadField: string;
  4.   begin
  5.     with InputFile do   // inputfile est un TFileStream
  6.     begin
  7.       ReadBuffer(recsize, intsize);
  8.       if recsize > 0 then
  9.       begin
  10.         ReallocMem(field, recsize+1);
  11.         field[recsize] := char(0);    // 0 de fin de chaîne pour en faire un PChar correct
  12.         ReadBuffer(field^, recsize);
  13.         result := field;
  14.       end else
  15.         result := '';
  16.     end;
  17.   end;

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°84950
[SDF]Poire
Vive Grumly
Posté le 30-12-2001 à 12:52:16  profilanswer
 

DrLobo a écrit a écrit :

je suis allé voir sur le site et j'ai pas trouvé de reponse a ma question.
Il y a bien un truc sur la lecture des tag id3 mais version 1 et donc avec taille définie ce qui dans mon cas ne pose pas de probleme.  




La taille d'1 partie est indiqué dans le tag ID3V2
http://www.stcommunications.ca/~mb [...] d3v2.shtml ou http://www.id3.org/id3v2.3.0.html


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°84955
drlobo
Posté le 30-12-2001 à 13:42:14  profilanswer
 

:cry:  :cry:  
 
antp>j'ai fait pareil ca marche pas
[SDF]Poire> je sais et j'ai taille exacte mais je la connait pas a l'avance -> taille dynamique
 
ca marche pas, je comprend pas  :sweat:  
 
j'ai mis le code source et un mp3 tagé pour que vous voyer par vous meme.
Je vais aller me pendre... :pt1cable:  
 
le lien: http://lyrixplugin.free.fr/dl/exempleID3.zip (3.8Mo)

n°84959
[SDF]Poire
Vive Grumly
Posté le 30-12-2001 à 14:04:09  profilanswer
 

DrLobo a écrit a écrit :

:cry:  :cry:  
 
antp>j'ai fait pareil ca marche pas
[SDF]Poire> je sais et j'ai taille exacte mais je la connait pas a l'avance -> taille dynamique
 
ca marche pas, je comprend pas  :sweat:  
 
j'ai mis le code source et un mp3 tagé pour que vous voyer par vous meme.
Je vais aller me pendre... :pt1cable:  
 
le lien: http://lyrixplugin.free.fr/dl/exempleID3.zip (3.8Mo)  




G :
 
debut de la lecture
---------------------------------
USLT
Taille du tag = 1114  Position=184
>
fin de la lecture
 
 
engSummer Son
Texas
Greatest Hits (2000)
 
i'm tired of telling the story  
tired of telling it your way  
yeh i know what i saw  
i know that i found the floor  
 
before you take my heart reconsider  
before you take my heart reconsider  
i've opened the door  
i've opened the door  
 
here comes the summer's son  
he burns my skin  
i ache again  
i'm over you  
 
i thought i had a dream to hold  
maybe that has gone  
your hands reach out and touch me still  
but this feels so wrong  
 
before you take my heart reconsider  
before you take my heart reconsider  
i've opened the door  
i've opened the door  
 
here comes the summer's son  
he burns my skin  
i ache again  
i'm over you  
 
before you take my heart reconsider  
before you take my heart reconsider  
i've opened the door  
i've opened the door  
 
here comes the summer's son  
he burns my skin  
i ache again  
i'm over you  
 
here comes the winter's rain  
to cleanse my skin  
i wake again  
i'm over you  
 
here comes the summer's son  
he burns my skin  
i ache again  
i'm over you  
 
here comes the winter's rain  
to cleanse my skin  
i wake again  
i'm over you  
 
i'm over you


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
n°84962
drlobo
Posté le 30-12-2001 à 14:17:07  profilanswer
 

j'ai aussi ca met si tu regardes le code c'est vraiment pas elegant pour recuperer ces paroles
de plus ca devrai aussi les afficher apres le ">" et la ca marche pas
 
et puis si tu essayes dans la boucle de replacer:
memo2.Text:=memo2.Text+Buffer[j];
par
temp:=temp+Buffer[j];
avec temp:string ca devrais faire la meme chose et ben nan!

 

[edtdd]--Message édité par DrLobo--[/edtdd]

n°84963
antp
Super Administrateur
Champion des excuses bidons
Posté le 30-12-2001 à 14:29:43  profilanswer
 

bon, mystère résolu:
http://users.skynet.be/acp/_images/buffer.png
les valeurs 0 sont utilisées comme fin de chaîne en C/C++, et pour le PChar du Pascal aussi.
Ici comme la chaîne commence par un 0, il considère que c'est une chaîne vide !
(sur le screenshot on voit le contenu de la variable buffer après lecture, "dumpée" dans un fichier. l'éditeur hexadécimal est souvent l'ami du programmeur, en tout cas c'est le cas d'après mon expérience pourtant relativement courte de programmeur)

 

[edtdd]--Message édité par antp--[/edtdd]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°84965
drlobo
Posté le 30-12-2001 à 14:37:08  profilanswer
 

:hap:  
Youhou !!
 
merci pour votre aide !!
je coinçai la dessus depuis un journée!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [Delphi] petage de plomb avec un Pchar

 

Sujets relatifs
[Delphi] RichEdit, racourcit clavier et Menu ![Delphi] couleur...
[delphi] pb avec les char et stringDivX Organizer en Delphi --> Beta Test SVP
avis de réception de courriel (delphi)modifier l'extension d'un fichier avec delphi
Besoin d'aide sous Delphi 6Test Chat fait en Delphi
[Delphi] 2 - 3 trucs[delphi] euh j ai peur d etre un peu bete mais bon
Plus de sujets relatifs à : [Delphi] petage de plomb avec un Pchar


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR