J'ai un fichier texte avec des éléments dos - hex (00) pour exampel. J'ai besoin de le lire et de le convertir. J'ai essayé d'utiliser utf8toansi, mais cela supprime toute la ligne avec hex (00). Y a-t-il un moyen de convertir en texte dans le fichier entier? J'utilise win32, RadStudio2007, Delphi.Lire le fichier texte avec l'octet nul nul
Répondre
Cela devrait faire ...
procedure ConvertFileToDos(const aInFile,aOutFile:String);
var
FileIn,FileOut:TextFile;
C:AnsiChar;
LineBreak:String;
begin
LineBreak := #13#10;
AssignFile(FileIn,aInFile);
Reset(FileIn);
AssignFile(FileOut,aOutFile);
ReWrite(FileOut);
while not EOF(FileIn) do
begin
Read(FileIn,C);
if C=#0 then
Write(FileOut,LineBreak)
else
Write(FileOut,C)
end;
CloseFile(FileIn);
CloseFile(FileOut);
end;
Vous pouvez le lire dans un TMemoryStream, assigner un PChar à la première adresse, et numériser avec une boucle de 0 à Taille - 1. C'est à vous de décider ce que vous voulez faire avec les caractères # 0 incorporés. Ignorez simplement le # 13 et ajoutez une chaîne sur chaque # 10 que vous rencontrez.
EDIT:
Quelque chose comme:
procedure TForm1.Button1Click(Sender: TObject);
var
FileStream: TStream;
MemStream: TMemoryStream;
P: PChar;
s: string;
i: integer;
begin
FileStream := TFileStream.Create('file.txt', fmOpenRead);
try
MemStream := TMemoryStream.Create;
try
MemStream.LoadFromStream(FileStream);
P := PChar(MemStream.Memory);
s := '';
for i := 0 to MemStream.Size - 1 do begin
case P[0] of
#0: {};
#10: begin
// do something with s
s := '';
end;
#13: {};
else
s := s + P[0];
end;
Inc(P);
end;
finally
MemStream.Free;
end;
finally
FileStream.Free;
end;
end;
TMemoryStream a une méthode LoadFromFile, évitant l'intermédiaire TFileStream. Notez également que la création de la chaîne d'un caractère à la fois est une mauvaise idée. Stockez la position de départ et la longueur, puis utilisez SetString. –
Je l'ai mis ensemble dans Delphi 4, où il n'y a pas TFileStream.LoadFromFile(), mais c'est bien sûr une très bonne idée pour les versions ultérieures de Delphi. Re 2) - c'est un très bon commentaire, et je ne le ferais jamais en code de production, j'utiliserais deux PChars. Mais je ne voulais pas trop compliquer l'exemple ... – mghie
Je ne sais pas Delphi, mais je pense que vous avez probablement besoin d'ouvrir le fichier en tant que fichier binaire et non un fichier texte. Ensuite, vous pouvez lire les octets directement et les convertir en ce que vous voulez.
résumé de la question et le texte est fortement trompeur. Tout ce que l'OP veut faire est de supprimer/remplacer certains caractères du fichier et de les réécrire. Pas besoin de faire cela avec Delphi, utilisez des outils de ligne de commande standard à la place. – mghie
Merci beaucoup d'avoir répondu :) J'ai essayé la dernière solution (ConvertFileToDos) et ça semble bien fonctionner pour moi :) – user15138
Désolé, mais je n'aurais jamais deviné à la question que vous vouliez convertir un fichier texte en un format différent. Pourquoi utiliser Delphi du tout dans ce cas? Que diriez-vous des outils standard comme tr, sed, awk? – mghie