merci pour votre aide !!
je coinçai la dessus depuis un journée!!
antp
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]
drlobo
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]
[SDF]Poire
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:
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.
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 :
recsize: integer;
field: PChar;
function ReadField: string;
begin
with InputFile do// inputfile est un TFileStream
begin
ReadBuffer(recsize, intsize);
if recsize > 0 then
begin
ReallocMem(field, recsize+1);
field[recsize] := char(0); // 0 de fin de chaîne pour en faire un PChar correct
ReadBuffer(field^, recsize);
result := field;
end else
result := '';
end;
end;
[edtdd]--Message édité par antp--[/edtdd]
drlobo
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.
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:
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...