Page 1 sur 1

[R] Remplacer des caractères "NULL" dans un fichier texte

Posté : mer. 19 nov. 2008 18:25
par havoc
Bonjour à tous,

Je viens chercher vos lumières sur un problème qui me bloque depuis un certain temps et pour lequel je n'ai trouvé aucune réponse...

Je souhaite vérifier un fichier texte dans lequel se trouvent des caractères NULL (0 en décimal et 00 en hexa), le problème vient du fait que lorsque je lis une ligne qui contient ce caractère avec FileReadLine, la lecture de la ligne s'arrête dès que la fonction trouve NULL, je ne peux donc pas trouver de caractère NULL et encore moins les corriger. Pire, si je recopie ma ligne nettoyée dans un autre fichier, j'ai perdu toutes les informations qui se trouvaient après le ou les caractère(s) NULL.

J'ai essayé le code suivant pour trouver la solution, sans succès :

Code : Tout sélectionner

#include <String.au3>

$Log    = FileOpen("LogFile.log", 2)

$file   = FileOpen("monfichier.txt", 0)
$file2 = _StringToHex($file)
$line = FileReadLine($file, 1)
FileWriteLine($Log, " Mode lecture classique : " & $line)
$line = _StringToHex($line)
$line = StringReplace($line,Hex(0), " ")
FileWriteLine($Log, " Mode lecture classique, string transformé en Hexa : " & $line)
$line = FileReadLine($file2, 1)
FileWriteLine($Log, " Mode lecture classique, fichier transformé en Hexa avant FileReadLine : " & $line)
FileClose($file)

$file   = FileOpen("monfichier.txt", 16)
$file2 = _StringToHex($file)
$line = FileReadLine($file, 1)
FileWriteLine($Log, " Mode lecture binaire : " & $line)
$line = _StringToHex($line)
$line = StringReplace($line,Hex(0), " ")
FileWriteLine($Log, " Mode lecture binaire, string transformé en Hexa : " & $line)
$line = FileReadLine($file2, 1)
FileWriteLine($Log, " Mode lecture binaire, fichier transformé en Hexa avant FileReadLine : " & $line)
FileClose($file)
FileClose($Log)
 
Merci d'avance pour vos réponses

Re: [..] Remplacer des caractères "NULL" dans un fichier texte

Posté : mer. 19 nov. 2008 19:17
par timmalos
Pourquoi pas lire le fichier entier avec Fileread, l'associer à une variable, et appliquer un stringreplace sur les caractères NULL pour les remplacer par des | par exemple. Après, si tu le souhaite, tu refais un FileReadLine et ca ne devrait plus poser de problème.

Re: [..] Remplacer des caractères "NULL" dans un fichier texte

Posté : mer. 19 nov. 2008 19:57
par sylvanie
Une autre méthode est d'oucrie le fichier via fileopen non pas en mode 0, mais en 16 (binaire), puis lire octet par octet en redirigeant ces dernier si ils sont non null vers un autre fichier ouvert en mode 17 qui sera le résultat écrémé

Re: [R] Remplacer des caractères "NULL" dans un fichier texte

Posté : ven. 21 nov. 2008 09:34
par havoc
Effectivement avec FileRead, j'ai pu trouver ma solution :

Code : Tout sélectionner

#include <String.au3>

$Log    = FileOpen("LogFile.log", 2)
$Path = "monfichier.txt"
$Path_Corr = StringReplace($Path,".txt","") & "_intermediaire.txt"
$file_corr  = FileOpen($Path_Corr, 2)

$file   = FileOpen($Path, 0)
$line = FileRead($file)
$line = StringReplace($line,Chr(0), " ")
FileWrite($file_corr, $line)
FileClose($file)
FileClose($file_corr)
$file   = FileOpen($Path_Corr, 0)
$line = FileReadLine($file, 1)
FileWriteLine($Log, " Lecture : " & $line)
FileClose($file)
FileClose($Log)
Cela m'oblige à utiliser un fichier intermédiaire mais bon, je le supprime à la fin de mon traitement...
Pour info, dans mon cas, utiliser le mode binaire (16) dans FileOpen est inutile car lorsque je fais ma recopie, je suis obligé de tout retransformer en ASCII

Merci beaucoup pour vos réponses

Re: [R] Remplacer des caractères "NULL" dans un fichier texte

Posté : ven. 21 nov. 2008 18:10
par havoc
Rhaaa... Je pensais mon problème résolu mais sur des fichiers lourds (600Mo) FileRead plante l'appli et j'obtiens le message suivant : "Error allocating Memory"

Code : Tout sélectionner

#include <String.au3>

$Log    = FileOpen("LogFile.log", 2)
$Path = "monfichier.txt"
$Path_Corr = StringReplace($Path,".txt","") & "_intermediaire.txt"
$file_corr  = FileOpen($Path_Corr, 2)

MsgBox(0,"Avant FileOpen","Ca marche")
$file   = FileOpen($Path, 0)
MsgBox(0,"Après FileOpen","Ca marche avant FileRead") ;Ok jusque là
$line = FileRead($file)
MsgBox(0,"Après FileOpen","Ca marche après FileRead") ; Je ne vois pas cette box
$line = StringReplace($line,Chr(0), " ")
MsgBox(0,"Après FileRead","Ca marche après StringReplace")
FileWrite($file_corr, $line)
FileClose($file)
FileClose($file_corr)
$file   = FileOpen($Path_Corr, 0)
$line = FileReadLine($file, 1)
FileWriteLine($Log, " Lecture : " & $line)
FileClose($file)
FileClose($Log)
 

Re: [..] Remplacer des caractères "NULL" dans un fichier texte

Posté : ven. 21 nov. 2008 18:54
par timmalos
J'ai eu le meme problème quand je voulais crypter des vidéos , fileread buguait car fichier trop gros, je ne me souviens plus du tout comment j'avais contourné , dsl, mais possible !

Re: [..] Remplacer des caractères "NULL" dans un fichier texte

Posté : sam. 22 nov. 2008 00:02
par Tlem
@havoc
Ca fait 3 ou 4 fois que je modifie vos posts pour mettre les balises de code correctes. :evil:

La coloration syntaxique du code est réservée aux forums :
  • - Exemples de script
    - Fonctions et UDF
    - Tutoriels
Merci.

Pour votre problème, sylvanie vous à déjà donné la solution.