OVH Cloud OVH Cloud

supprimer les lignes dans un fichier

34 réponses
Avatar
Trust
Bonjour,

J’ai un très gros fichier .txt
Je souhaite supprimer les lignes qui sont en double dans le fichier.
Alors je recherche un script vbs pouvant le faire.
Si quelqu’un a une suggestion.
Merci d’avance.

10 réponses

1 2 3 4
Avatar
Jean
type t1.txt | ? {(type t2.txt) -contains $_} > t3.txt


Bravo.

Ca peut même faire :

${t1.txt} | ? {${t2.txt} -contains $_} > t3.txt

Nous avons déjà pressenti l'abandon du batch par Michel ... je pense
qu'il prépare un tirroir pour Python :O)

Amicalement,

--
Jean - JMST
Belgium

Avatar
Jacques Barathon [MS]
"Jean" wrote in message
news:
type t1.txt | ? {(type t2.txt) -contains $_} > t3.txt


Bravo.

Ca peut même faire :

${t1.txt} | ? {${t2.txt} -contains $_} > t3.txt

Nous avons déjà pressenti l'abandon du batch par Michel ... je pense qu'il
prépare un tirroir pour Python :O)


En parlant de batch, je vais faire le boulot de Michel et montrer que cet
environnement a encore de beaux jours devant lui:

findstr /g:t1.txt t2.txt > t3.txt

Jacques


Avatar
Méta-MCI
Bonsoir !


Un problème, peu connu, vient des limites de FINDSTR.
Lorsqu'on tente de dépasser ces limites, on obtient un "FINDSTR write error"

Malheureusement, je manque de détails sur ces limites.


@-salutations

Michel Claveau
Avatar
sympatix
Il lit le fichier et supprime les lignes en double.


Pour rééquilibrer ce fil de discusion ;-) et pour la beauté du geste, je
viens de faire (très modestement) un petit bout de code en bon vieux vbs,
qui fait (sauf bug) ce que tu demandes.
Je ne sais pas si la méthode que j'emploie est optimisée, mais elle a le
mérite de fonctionner plus ou moins bien quand même.
Comme le dit Jean, c'est plus compliqué à faire (quoique, je trouve mon code
bizarrement court, pour du vbs, cherchez l'erreur...?)
Le seul bug que j'ai pu constater, est la non recopie de certaines lignes
vides...mais j'ai la flemme de chercher ;-)
Sinon, après plusieurs essais sur différents fichiers, les lignes en double
sont bien supprimmées, où qu'elles soient.

2 inconvénients constatés, qui peuvent devenir gênant: la lenteur
d'exécution, ainsi que l'utilisation des ressources du processeur (quoique
dans ce cas là, 1 ou 2 petits Wscript.sleep bien placés pourraient régler le
pbl. Pour la lenteur, ça dépasse les 20mn quand on avoisine aproximativement
les 600-700ko.
Je mets le code ci-dessous, à toute fins utiles:
-----------------------------------------------------------
Const Pour_Lire = 1
Const Pour_Ajouter = 8
Source = "C:source.txt"
Cible = "C:cible.txt"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set F1 = oFSO.OpenTextFile (source, Pour_Lire, True)
Set F3 = oFSO.OpenTextFile (cible, Pour_Ajouter, True)
Lit1 = F1.ReadLine
F3.WriteLine Lit1
Do Until F1.AtEndOfStream
Flag = False
Lit1 = F1.ReadLine
Set F2 = oFSO.OpenTextFile (cible, Pour_Lire, True)
Do Until F2.AtEndOfStream
Lit2 = F2.ReadLine
If Lit2 = Lit1 Then
Flag = True
F2.Close
Exit Do
End If
Loop
If Flag = False Then F3.WriteLine Lit1
Loop
-----------------------------------------------------------
--
Cordialement
sympatix
Antispam: Supprimer les "toto" pour me répondre

Avatar
Jean
En parlant de batch, je vais faire le boulot de Michel et montrer que cet
environnement a encore de beaux jours devant lui:

findstr /g:t1.txt t2.txt > t3.txt


C'est findstr.exe qui a de beaux jours devant lui :-)

On peut utiliser exactement la même commande dans une console
PowerShell :-)

Amicalement,

--
Jean - JMST
Belgium

Avatar
Jean
et pour la beauté du geste


C'est le plus important :-)

La lenteur vient de FSO (accentué par le nombre de passe avec f2).
La charge processeur c'est bien Sleep qui vient à la rescousse.

Amicalement,

--
Jean - JMST
Belgium

Avatar
Michel Claveau
Salut !

On peut utiliser exactement la même commande dans une console PowerShell :-)


On peut également utiliser la même commande dans PeJBshell.
Directement, si on est en mode DOS ; précédée d'un point (".") si on
est en mode PYTHON.

--
@-salutations

Michel Claveau

Avatar
bayosky
Notre ami sympatix tapota :

(...)

2 inconvénients constatés, qui peuvent devenir gênant: la lenteur
d'exécution, ainsi que l'utilisation des ressources du processeur
(quoique dans ce cas là, 1 ou 2 petits Wscript.sleep bien placés
pourraient régler le pbl. Pour la lenteur, ça dépasse les 20mn quand
on avoisine aproximativement les 600-700ko.
Je mets le code ci-dessous, à toute fins utiles:
-----------------------------------------------------------
Const Pour_Lire = 1
Const Pour_Ajouter = 8
Source = "C:source.txt"
Cible = "C:cible.txt"

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set F1 = oFSO.OpenTextFile (source, Pour_Lire, True)
Set F3 = oFSO.OpenTextFile (cible, Pour_Ajouter, True)
Lit1 = F1.ReadLine
F3.WriteLine Lit1
Do Until F1.AtEndOfStream
Flag = False
Lit1 = F1.ReadLine
Set F2 = oFSO.OpenTextFile (cible, Pour_Lire, True)
Do Until F2.AtEndOfStream
Lit2 = F2.ReadLine
If Lit2 = Lit1 Then
Flag = True
F2.Close
Exit Do
End If
Loop
If Flag = False Then F3.WriteLine Lit1
Loop
-----------------------------------------------------------
Bonsoir,


la demande initiale ne donnait aucune indication concernant le nombre
probable de lignes...
ç'est pourtant une info importante :o)

Il me semble qu'en lisant tout d'un coup et en séparant les lignes
avec split, on devrait accélérer sensiblement la manip. Le FSO n'est
pas très véloce et mieux vaut limiter ses interventions :o)

HB

Avatar
sympatix
In news:,
bayosky typed:

la demande initiale ne donnait aucune indication concernant le nombre
probable de lignes...
ç'est pourtant une info importante :o)


C'est vrai, juste le poids. En plus, un fichier peut être petit pour
certains, et
gros pour d'autre, tout est relatif :-)

Il me semble qu'en lisant tout d'un coup et en séparant les lignes
avec split, on devrait accélérer sensiblement la manip. Le FSO n'est
pas très véloce et mieux vaut limiter ses interventions :o)


Merci pour la suggestion. Si j'ai le temps, j'essayerai cette méthode, je
connais moins, ce sera
l'occas d'apprendre...mais là, pfff, fait chaud ;-)

...Par contre, s'il fait moins chaud chez toi, et si t'as le temps...(sans
vouloir te commander), pour la beauté du geste :-D

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

Avatar
sympatix
In news:,
Jean typed:

La lenteur vient de FSO


...Et y fait chaud, pour FSO ;-)
(désolé)...

--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

(Antispam: Ôter les "toto" dans l'adresse, pour me répondre)

1 2 3 4