Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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
sympatix
In news:,
Trust typed:
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.


Bonsoir,

Pour supprimer des lignes dans un fichier texte, il faut, en gros, recopier
ce fichier ligne par ligne, en testant chaque ligne, et en ne recopiant que
celles que tu désires conserver. En effet, en vbs tu ne peux pas intervenir
au milieu du flux d'un fichier texte.
Tu peux trouver des infos dans cette discussion de mars, traitant
grosso-modo du même sujet. Dans mon exemple, on recopie un fichier texte en
modifiant certaines lignes. Il faut juste changer un peu, en ne recopiant
tout simplement pas les lignes que tu ne veux plus.
http://groups.google.fr/group/microsoft.public.fr.scripting/browse_frm/thread/939c2aed66da6e26/054e73e49eedee93?tvc=1&q=group%3Amicrosoft.public.fr.scripting&hl=fr#054e73e49eedee93

Bon courage.
--
Cordialement
saint_path_x_arobase_t'es_laide_euh_point_fr

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

Avatar
Jacques Barathon [MS]
"Trust" wrote in message
news:
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.


Tu peux le faire très simplement en PowerShell. Imaginons fichier.txt avec
le contenu suivant:

--- début de fichier ---
ligne unique #1
ligne unique #2
ligne en double #1
ligne unique #3
ligne en double #1
ligne unique #4
--- fin de fichier ---

La commande suivante va sélectionner les lignes non redondantes:

PS> type fichier.txt | select -unique
ligne unique #1
ligne unique #2
ligne en double #1
ligne unique #3
ligne unique #4

Tu n'as plus qu'à rediriger le résultat dans un autre fichier:

PS> type fichier.txt | select -unique > fichier2.txt

Jacques

Avatar
Trust
"Trust" wrote in message
news:
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.


Tu peux le faire très simplement en PowerShell. Imaginons fichier.txt avec le
contenu suivant:

--- début de fichier ---
ligne unique #1
ligne unique #2
ligne en double #1
ligne unique #3
ligne en double #1
ligne unique #4
--- fin de fichier ---

La commande suivante va sélectionner les lignes non redondantes:

PS> type fichier.txt | select -unique
ligne unique #1
ligne unique #2
ligne en double #1
ligne unique #3
ligne unique #4

Tu n'as plus qu'à rediriger le résultat dans un autre fichier:

PS> type fichier.txt | select -unique > fichier2.txt

Jacques


Le vbs que tu proposes n’est pas mal.
Ça suppose une connaissance en amont de la ligne (en double) à
supprimer.
C’est cette partie du code que je n’arrive pas à mettre en place en
vbs.
Je voudrais que tout ça soit automatique.
Il lit le fichier et supprime les lignes en double.
Ça ne dérange pas de passer par des fichiers temporaires.

Merci d’avance


Avatar
bayosky
Notre ami Trust tapota :


Le vbs que tu proposes n’est pas mal.
Ça suppose une connaissance en amont de la ligne (en double) à
supprimer.


salut,

Il me semble que tu n'as pas compris :

1. que ce qui a été proposé n'est pas du vbs
2. que ce qui est proposé ne suppose pas que l'on sait à l'avance où
seront les doublons.

En revanche ta question est trop vague...
car un point important n'y est pas précisé :

Les lignes identiques sont elles forcément groupées...

Si oui c'est assez facile :

a. Tu lis tout le fichier et tu sépares les lignes ( voir fonction
split)
b. Tu balayes la liste obtenue et tu remplis une nouvelle liste à
mesure
avec un test pour ne pas y ajouter plusieurs fois la même chose
c. tu recompactes l'ensemble et tu sauves...

sinon

a. identique
b. il va falloir trier la liste
et ainsi les doublons se suivront.
c. et d. balayage etc ... comme au dessus...

On pourait virer les doublons en retrouvant l'ordre initial
( en fixant pour les doublons le rang au premier rencontré ...)
mais c'est plus délicat :
il faut ajouter un tableau d'index que l'on brasse en parallèle durant
la phase de tri
ainsi, ensuite, on connait la position initiale de chaque élément ...


Tu trouveras de nombreux exemples des fonctions de bases en VBS pour
l'accès aux fichiers
( et sur split ) chez notre grand gourou jcb ...

c'est en faisant que l'on apprend :o)

bon courage donc ...

HB

Avatar
Jacques Barathon [MS]
"Trust" wrote in message
news:
<snip>
Le vbs que tu proposes n'est pas mal.


Ce n'est pas du vbs, c'est du PowerShell. PowerShell est téléchargeable ici
(version RC1):
http://www.microsoft.com/downloads/details.aspx?FamilyId+0BBFCD-0797-4083-A817-5E6A054A85C9&displaylang=en

Ça suppose une connaissance en amont de la ligne (en double) à supprimer.


Pas du tout. La seule ligne à taper est:

type fichier.txt | select -unique > fichier2.txt

La commande "select -unique" récupère le contenu du fichier "fichier.txt" et
sélectionne toutes les lignes uniques (non redondantes).

Pour le faire en vbs, c'est un peu plus compliqué. Déjà, les lignes
redondantes sont-elles toujours contigues ou peuvent-elles être dispersées
dans le fichier? Si elles sont toujours contigues, on peut imaginer une
solution qui consisterait à comparer les lignes deux à deux et à ne recopier
une ligne dans le 2e fichier que si elle n'est pas identique à la
précédente. Je n'ai pas le temps (ni le courage pour être honnête) de m'y
mettre ce soir, mais c'est une piste...

Jacques

Avatar
Jean
Pour le faire en vbs, c'est un peu plus compliqué.


Je dirais même plus : *beaucoup* plus compliqué.

Le traitement du système de fichier par PowerShell est une petite
merveille du genre pour qui veut s'y arrêter.

Je suis un peu déçu de ne pas avoir vu Michel, avec quelques find.exe,
findstr.exe,... faire renaître le batch de ses cendres tel le phénix
:O)
Je reste sur ma faim :O)

Amicalement,

--
Jean - JMST
Belgium

Avatar
Michel Claveau
Salut !

C'est bien pour te faire plaisir...

Voici une version PeJBshell :

.pyt
s=Set(lload('source.txt'))
lwrite('dest.txt',s)
quit


Une version plus verbeuse, peut-être plus explicite :

.pyt #passage en mode Python
l=lload('source.txt') #chargement d'un fichier dans une liste
s=Set(l) #conversion d'une liste en 'Set'
lwrite('dest.txt',s) #écriture liste (ou Set) dans un fichier
quit #OK, on sort


Et une version plus courte :
.pyt
lwrite('dest.txt',Set(lload('source.txt')))
quit



;o) et @+

--
@-salutations

Michel Claveau
Avatar
Michel Claveau
Re !

Dans le même genre, voici un script qui va trouver les lignes que l'on
trouve identiques, dans deux fichiers textes différents :

.pyt
s=Set(lload('t1.txt'))
r=Set(lload('t2.txt'))
lwrite('intersect.txt',(s & r))
quit

J'aimerais bien savoir comment c'est possible en PS...

@+

--
@-salutations

Michel Claveau
Avatar
Méta-MCI
Dis donc, Jean :
il paraît que la Belgique pense ne perdre AUCUN match, durant le mondial
de foutebol. C'est vrai ?


@+

MCI
Avatar
Jacques Barathon [MS]
"Méta-MCI" wrote in message
news:u%
Dis donc, Jean :
il paraît que la Belgique pense ne perdre AUCUN match, durant le
mondial de foutebol. C'est vrai ?


Tout à fait possible, s'ils font trois matches nuls dans le premier tour et
ne finissent pas dans les deux premiers de leur groupe :-)

Jacques

1 2 3 4