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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
havoc
Niveau 1
Niveau 1
Messages : 5
Enregistré le : ven. 17 août 2007 11:41
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par havoc le sam. 29 nov. 2008 19:57, modifié 4 fois.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#2

Message 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.
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

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

#3

Message 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é
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
havoc
Niveau 1
Niveau 1
Messages : 5
Enregistré le : ven. 17 août 2007 11:41
Status : Hors ligne

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

#4

Message 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
Modifié en dernier par Tlem le ven. 21 nov. 2008 17:27, modifié 1 fois.
Raison : Remplacement de la balise [code=autoit] par [code=text]
havoc
Niveau 1
Niveau 1
Messages : 5
Enregistré le : ven. 17 août 2007 11:41
Status : Hors ligne

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

#5

Message 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)
 
Modifié en dernier par Tlem le ven. 21 nov. 2008 23:59, modifié 1 fois.
Raison : Remplacement de la balise [code=autoit] par [code=text]
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

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

#6

Message 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 !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11796
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#7

Message 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.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre