Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3418 connectés 

 


Dernière réponse
Sujet : [script] Manipulation de fichier, besoin d optimisation
kicest Bonjour,
 
j'ai un fichier d'une seule ligne (c'est à dire sans caractère de retour à la ligne (\n , \r\n)).
 
Je dois exploiter ces fichiers, et pour ce faire j'ai besoin de les "formatter", c'est à dire reconstituer des lignes.
 
je travail sous W2k, et j'ai récupéré unixtools (les commandes unix sous Win).
 
J'ai fais un awk, mais celui-ci est TRES lent (les fichiers peuvent atteindre 4 Go).
 
comment faire une substitution simple ? (sprintf, split, perl, ???)
 
la chaine est identifiée comme suit :  
 
[0-9][0-9][0-9][0-3][0-9]\/[0-1][0-9]\/20[0-1][0-9]
 
et donc il suffirait d'insérer un caractére "\n" avant cette chaine autant de fois qu'elle est rencontrée dans la ligne.
 
dans un fichier moyen de 200 Mo (1 seule ligne) je génère environ 2.600.000 Lignes au final.
 
Voici ce que j'ai fais :
 
Exécution du awk qui a pour but d'insérer un retour chariot dès que la chaine est rencontrée.
 
Syntaxe du awk :
{
posdepart=1
while ( length($0) >= posdepart ) {  
if ( substr($0,posdepart,13) ~ /[0-9][0-9][0-9][0-3][0-9]\/[0-1][0-9]\/20[0-1][0-9]/ )
{ printf "\n%s", substr($0,posdepart,1) } else { printf "%s", substr($0,posdepart,1) }
posdepart++ }
                }
 
En fait je lis le fichier caractere par caractere, et à chaque fois que je rencontre ma chaine, j'insere un retour chariot.
 
Merci de votre aide.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
kicest Bonjour,
 
j'ai un fichier d'une seule ligne (c'est à dire sans caractère de retour à la ligne (\n , \r\n)).
 
Je dois exploiter ces fichiers, et pour ce faire j'ai besoin de les "formatter", c'est à dire reconstituer des lignes.
 
je travail sous W2k, et j'ai récupéré unixtools (les commandes unix sous Win).
 
J'ai fais un awk, mais celui-ci est TRES lent (les fichiers peuvent atteindre 4 Go).
 
comment faire une substitution simple ? (sprintf, split, perl, ???)
 
la chaine est identifiée comme suit :  
 
[0-9][0-9][0-9][0-3][0-9]\/[0-1][0-9]\/20[0-1][0-9]
 
et donc il suffirait d'insérer un caractére "\n" avant cette chaine autant de fois qu'elle est rencontrée dans la ligne.
 
dans un fichier moyen de 200 Mo (1 seule ligne) je génère environ 2.600.000 Lignes au final.
 
Voici ce que j'ai fais :
 
Exécution du awk qui a pour but d'insérer un retour chariot dès que la chaine est rencontrée.
 
Syntaxe du awk :
{
posdepart=1
while ( length($0) >= posdepart ) {  
if ( substr($0,posdepart,13) ~ /[0-9][0-9][0-9][0-3][0-9]\/[0-1][0-9]\/20[0-1][0-9]/ )
{ printf "\n%s", substr($0,posdepart,1) } else { printf "%s", substr($0,posdepart,1) }
posdepart++ }
                }
 
En fait je lis le fichier caractere par caractere, et à chaque fois que je rencontre ma chaine, j'insere un retour chariot.
 
Merci de votre aide.

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)