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

  FORUM HardWare.fr
  Programmation
  Divers

  Un moyen de supprimer les lignes d'un texte

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Un moyen de supprimer les lignes d'un texte

n°2311737
satoshi2
Posté le 28-02-2018 à 13:57:01  profilanswer
 

qui contiennent des lettres prédéfinies peu importe l'ordre ?

 

Exemple un fichier notepad avec :

 

abcaa
bbcab
cbaccc
kikiee
oiokil

 

je veut que le script supprime automatiquement toutes les lignes qui ont "abc", soit en l'occurence les 3 premières. Merci   :bounce:


Message édité par satoshi2 le 28-02-2018 à 13:59:36
mood
Publicité
Posté le 28-02-2018 à 13:57:01  profilanswer
 

n°2311739
pluj
Posté le 28-02-2018 à 14:03:54  profilanswer
 

Lu,
 
euh, dans quel langage ? Tu as fait quoi ?
 
a ou b ou c : grep -ve a -e b -e c mon_fichier ?


Message édité par pluj le 28-02-2018 à 14:06:55
n°2311741
satoshi2
Posté le 28-02-2018 à 14:06:34  profilanswer
 

Peu importe le language.

 

Juste par exemple un script qui dirait

 

"supprimer toutes les lignes qui contiennent a,b,c" dans un fichier texte

 

et sur windows, surtout

 

par exemple abced est supprimé, mais abede est gardé.


Message édité par satoshi2 le 28-02-2018 à 14:08:35
n°2311744
pluj
Posté le 28-02-2018 à 14:13:15  profilanswer
 

En PHP, c'est facile, si le fichier n'est pas trop long :
 

Code :
  1. <?php
  2. const FICHIER = '/tmp/mon_fichier';
  3.  
  4. file_put_contents(
  5.    FICHIER,
  6.    implode(
  7.        '',
  8.        array_filter(
  9.            file(FICHIER),
  10.            function ($v) {
  11.                return FALSE === strpos($v, 'a') || FALSE === strpos($v, 'b') || FALSE === strpos($v, 'c');
  12.            }
  13.        )
  14.    )
  15. );


Message édité par pluj le 28-02-2018 à 14:18:05
n°2311745
satoshi2
Posté le 28-02-2018 à 14:13:45  profilanswer
 

et si il est trop long ? ça crash c'est ça ?

n°2311746
rufo
Pas me confondre avec Lycos!
Posté le 28-02-2018 à 14:16:29  profilanswer
 

Choisis ton langage (C/C++, java, PHP/Perl, Powershell, Autoit...) et écris un bout de code puis reviens ici si tu as des questions ou que tu rencontre des pbs. Mais on ne te le fera pas ce script. :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2311747
pluj
Posté le 28-02-2018 à 14:21:51  profilanswer
 

Citation :

et si il est trop long ? ça crash c'est ça ?


Le contenu du fichier est intégralement mis en mémoire, donc, c'est possible. Du moins, ce n'est pas idéal pour un fichier volumineux.
 
Sinon il faut lire le fichier ligne par ligne (fgets) pour réécrire les lignes qui ne contiennent ni a ni b ni c dans un fichier temporaire avant de remplacer le fichier original par ce dernier.


Message édité par pluj le 28-02-2018 à 14:22:18
n°2311748
satoshi2
Posté le 28-02-2018 à 14:26:28  profilanswer
 

"Sinon il faut lire le fichier ligne par ligne (fgets) pour réécrire les lignes qui ne contiennent ni a ni b ni c dans un fichier temporaire avant de remplacer le fichier original par ce dernier."
 
 
et par exemple en autoit ça serait en gros quoi comme fonctions ?

n°2311749
satoshi2
Posté le 28-02-2018 à 14:33:06  profilanswer
 

ça à l'air extrêmement dur ça, je suppose que ça fait intervenir des array ?

n°2311750
pluj
Posté le 28-02-2018 à 14:33:16  profilanswer
 

Citation :

et par exemple en autoit ça serait en gros quoi comme fonctions ?


 
Avant c'était n'importe quel langage et maintenant tu précises autoit.
 
Bref, je ne connais pas et à toi de chercher aussi ...
 

Citation :

ça à l'air extrêmement dur ça, je suppose que ça fait intervenir des array ?


La solution PHP ci-dessus, oui. Une bête lecture ligne par ligne, non.


Message édité par pluj le 28-02-2018 à 14:34:25
mood
Publicité
Posté le 28-02-2018 à 14:33:16  profilanswer
 

n°2311752
satoshi2
Posté le 28-02-2018 à 14:43:41  profilanswer
 

Je précise autoit car je connais un peu. Mais au pire n'importe quel langage c'est bon.

 

Le truc que j'arrive pas c'est de déterminer si dans une ligne d'un .txt, 2-3 lettres sont présentes.

 

Si quelqu'un sait, même en php ou autre ça serait cool.

 

Après c'est possible pour moi de raccorder avec un script autoit qui fera le taff de supprimer ou de créer un nouveau fichier sans les dit-lignes qui font tâche.

 
Spoiler :

http://www.pattesetmoustaches.com/wp-content/uploads/2016/06/photo-petit-chaton-mignon.jpg


Message édité par satoshi2 le 28-02-2018 à 15:14:26
n°2311762
MaybeEijOr​Not
but someone at least
Posté le 28-02-2018 à 15:31:04  profilanswer
 

"Expression régulière"


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2311764
rufo
Pas me confondre avec Lycos!
Posté le 28-02-2018 à 15:52:14  profilanswer
 

Peu importe le langage, écris l'algo en pseudo-code. Une fois fait, t'as plus qu'à prendre la doc du langage et d'aller dans les sections "fichiers" et "chaînes de caractères" pour trouver les fonctions qui permettent d'ouvrir et fermer un fichier, de lire une ligne, d'écrire une ligne puis la fonction qui permet de faire soit un regexp soit une recherche de sous-chaîne dans une chaîne.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2311769
pluj
Posté le 28-02-2018 à 16:14:24  profilanswer
 

Citation :

Si quelqu'un sait, même en php ou autre ça serait cool.


 
Ce n'est pas comme si le code que j'ai donné ne comportait pas la solution (strpos) ...

n°2311773
rufo
Pas me confondre avec Lycos!
Posté le 28-02-2018 à 17:13:52  profilanswer
 

satoshi2, il va falloir te prendre en main un peu car on ne va pas te faire tout le boulot à ta place, cf les règles [0C] et [0D] de ce forum :o
pluj a déjà fait une bonne partie du code...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2311800
xilebo
noone
Posté le 01-03-2018 à 11:05:01  profilanswer
 

L'énoncé n'est pas suffisamment précis.  
 - est ce qu'il faut supprimer uniquement s'il y a au moins les 3 ?  
 - est ce que les 3 doivent être continus ? Par exemple bacaaaa ca marche mais bkcaaaa  , ca ne marche pas pas
- est ce bien le triplé 'abc' ( peu importe l'ordre ) qui importe, ou bien une  fois qu'on le rencontre, on supprime tous les autres occurrences :  
     * abcbcakk donne bcakk ou kk ? ( on supprime toutes les occurrences de 'abc' peu importe l'ordre )
     * abcakk donne akk ou kk ?  ( on a rencontré une fois 'abc' peu importe l'ordre, on supprime tous les a , b et c )
 - est ce que l'occurrence rencontrée peut se trouver en n'importe quelle position ou doit-elle être en début de ligne ?

 
Edit : j'avais pas vu qu'il fallait supprimer toute la ligne :o
 
 
En shell script ( avec sed)  c'est assez simple, avec PERL aussi, sinon python.
 
edit2 : avec sed  
 

Code :
  1. sed -i '/\(abc\)\|\(acb\)\|\(bac\)\|\(bca\)\|\(cba\)\|\(cab\)/d' monfichier.txt


Message édité par xilebo le 01-03-2018 à 11:45:15
n°2311917
satoshi2
Posté le 02-03-2018 à 11:20:09  profilanswer
 

Oui j'ai finalement trouvé, merci beaucoup.

 

Il me manque juste un truc :

 

Comment faire pour supprimer une colonne entière d'un fichier texte ? Si la longueur est trop importante pour sélectionner manuellement bien sûre. Donc avec un petit script ou logiciel externe. Y a pas de "/" qui sépare les colonnes dont excel ne marchera pas.

 

L'idée c'est de passer de :

 

aaab
aaab
aaab

 

à

 

aaa
aaa
aaa

 


merci


Message édité par satoshi2 le 02-03-2018 à 11:23:13
n°2311919
xilebo
noone
Posté le 02-03-2018 à 11:22:32  profilanswer
 

la notion de colonne n'existe pas dans un fichier texte.
 
Cependant, si la largeur et la position de ta colonne sont fixes , tu peux te dire que le début de la colonne c'est n caractères après le caractère \n , et la largeur valant m , tu effaces donc les caractères entre n et n + m - 1 pour chaque ligne ( ne pas oublier de traiter la première ligne ).

n°2311922
satoshi2
Posté le 02-03-2018 à 11:34:19  profilanswer
 

ou alors plutot supprimer une suite de lettres à chaque ligne, sachant que les colonnes sont les mêmes

 

exemple :

 

aaabbb
cccbbb
dddbbb

 

deviendrait :

 

aaa
ccc
ddd

 

ça m'irai car bbb est supprimé, et comme toutes les colonnes sont bbb, ça efface les colonnes


Message édité par satoshi2 le 02-03-2018 à 11:36:15
n°2311925
xilebo
noone
Posté le 02-03-2018 à 11:41:50  profilanswer
 

avec sed, tu peux supprimer comme je te l'ai dit de la façon suivante :

 



filsif@sd-102108:~$ cat texte.txt
abdc111aaa
abed222a
accd433bkgfkfkek
aefd555
roez500eezek
filsif@sd-102108:~$ sed -r 's/^(.{4})(.{3})(.*)/\1\3/g' texte.txt
abdcaaa
abeda
accdbkgfkfkek
aefd
roezeezek
filsif@sd-102108:~$

 

edit : j'ai supprimé les caractères 4 à 7 de chaque ligne


Message édité par xilebo le 02-03-2018 à 11:42:40
n°2311926
xilebo
noone
Posté le 02-03-2018 à 11:46:06  profilanswer
 

je vois que tu es sous windows, mais sed existe sous windows avec cygwin.
 
Sinon, tu peux faire la même chose avec  notepad++ en utilisant les macros vu que la taille est fixe.
 
Voici l'algo :
 
- tu ouvres ton fichier avec notepad++
- tu te mets au debut de ton fichier
- tu fais "start recording macro"
- tu fais 4 fois flèche droite ( dans mon exemple )
- tu fais 3 fois del
- tu fais retour début de la ligne
- tu fais flèche bas
- tu stoppes l'enregistrement de la macro
 
A partir de ce moment là, à partir du début de la 2eme ligne, tu peux jouer la macro en boucle jusque la fin de ton fichier.

n°2311936
satoshi2
Posté le 02-03-2018 à 14:20:24  profilanswer
 

ok merci c'est fait

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Un moyen de supprimer les lignes d'un texte

 

Sujets relatifs
Moyen le plus simple pour lire des fichiers CSV --> TableauRecherche de cellule en fonction d'un texte donné.
Extraire texte d'un PDF pour automatiser des traitementssupprimer certaines balises d'un fichier xml
taille du texte qui change d'un navigateur a un autreImpossible de décaler texte dans bordures
[MySQL] Supprimer toutes les contraintes d'une table[Perl] Remplacer plusieurs lignes par le résultat d'un appel externe
[VBA] Lecture fichier texteVBA word supprimer lignes en doubles
Plus de sujets relatifs à : Un moyen de supprimer les lignes d'un texte


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR