Page 2 sur 2
Re: [..] Traitement de fichier text
Posté : jeu. 10 mai 2012 15:45
par bigophone
Bonjour.
Désolé c'etais le fichier a traité et non le resulta attendu.
J ai rectifié
Pour le resulta ces juste pour prendre des données dans le premier fichier.
Re: [..] Traitement de fichier text
Posté : jeu. 10 mai 2012 16:38
par mikell
Oui ça j'avais compris, ce que je voudrais savoir c'est :
De ce fichier à traiter, quelles sont les données que tu veux récupérer ? peux-tu écrire ça à la main histoire de montrer à quoi doit ressembler le fichier de résultat ?
Re: [..] Traitement de fichier text
Posté : jeu. 10 mai 2012 17:35
par bigophone
Voici le resulta souhaité
Ligne1 Ligne2
1857 3010
8241 4010
1009 6010
2929 0010
bien sur le fichier a plus de ligne que cette exemple (200 environs).
Re: [..] Traitement de fichier text
Posté : ven. 11 mai 2012 10:40
par sylvanie
bonjour,
brute de fonderie, je traiterai ainsi :
► Afficher le texte
Code : Tout sélectionner
$file=@ScriptDir&"\atraiter.txt"
$size=FileGetSize($file)
$hndlecture=FileOpen($file,0)
If $hndlecture = -1 Then Exit 1
$contenu=FileRead($hndlecture,$size)
FileClose($hndlecture)
;on ne garde que les digits, les / et les retours chariots
$contenu=StringRegExpReplace($contenu,"[^\d/\r\n]","")
$couples=StringRegExp($contenu,"(\d+/\d+)",3)
If Not IsArray($couples) Then Exit 2
$fileout=@ScriptDir&"\sortie.txt"
$hndecriture=FileOpen($fileout,2)
if $hndecriture=-1 Then Exit 3
$sortie=""
$limite=UBound($couples)-1
For $indice=0 To $limite
$sortie&=StringReplace($couples[$indice],"/"," ")&@CRLF
Next
FileWrite($hndecriture,$sortie)
FileClose($hndecriture)
ConsoleWrite($sortie)
Exit 0
Si il y a du reformatage Html par la suite TBD
[Edit] La phase de nettoyage n'est pas vraiment obligatoire, mais perso j'aime bien commencer par dégager tout ce qui est "parasite"
Re: [..] Traitement de fichier text
Posté : ven. 11 mai 2012 13:50
par mikell
Hum je l'avais enlevé sui-là mais finalement il marche très bien ^^
Code : Tout sélectionner
$string = FileRead("a_traiter.txt")
$txt = "Ligne1 Ligne2" & @crlf
$ligne = StringSplit($string, @crlf)
For $i = 1 to $ligne[0] ; pour chaque ligne du fichier
; vire la ligne si elle contient des caractères alien ou comporte moins de 8 caractères
If not StringRegExp($ligne[$i], '[^\s\d\w/]') and StringLen($ligne[$i])>8 Then
; récupère les données sur la ligne
$txt &= StringRegExpReplace($ligne[$i], '.*?(\d{4})/.*(\d{4})/.+', "$1 $2") & @crlf
EndIf
Next
msgbox(0,"", $txt)
;FileWrite("resultat.txt", $txt)
Si le fichier fait plus de 10000 lignes, il vaut mieux au lieu de concaténer écrire les lignes au fur et à mesure dans le fichier de sortie ouvert en écriture
Re: [..] Traitement de fichier text
Posté : ven. 11 mai 2012 15:58
par sylvanie
10000 n'est peut être pas forcément une valeur butoire, car en en admettant qu'une ligne fasse 1ko (et c'est une sacrée ligne !) on à 10Mo de pris en mémoire, ce qui est pour un pc actuel franchement acceptable ... Par contre 10000 écritures dans un fichier ça peut devenir longuet.
Si on joue la carte du compromis, on constitue des paquets de lignes en ram (genre 1000 comme ça) et on fait un filewrite toutes les 1000 lignes en gérant donc un compteur. (et on n'oublie pas de faire un dernier filewrite en sortie de lecture si le compteur en question est <> 0).
Ainsi on n'éclate pas la mémoire et on ne passe pas son temps à faire des accès disques.