Un moyen de supprimer les lignes d'un texte - Divers - Programmation
Marsh Posté le 28-02-2018 à 14:03:54
Lu,
euh, dans quel langage ? Tu as fait quoi ?
a ou b ou c : grep -ve a -e b -e c mon_fichier ?
Marsh Posté le 28-02-2018 à 14:06:34
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é.
Marsh Posté le 28-02-2018 à 14:13:15
En PHP, c'est facile, si le fichier n'est pas trop long :
Code :
|
Marsh Posté le 28-02-2018 à 14:16:29
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.
Marsh Posté le 28-02-2018 à 14:21:51
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.
Marsh Posté le 28-02-2018 à 14:26:28
"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 ?
Marsh Posté le 28-02-2018 à 14:33:06
ça à l'air extrêmement dur ça, je suppose que ça fait intervenir des array ?
Marsh Posté le 28-02-2018 à 14:33:16
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.
Marsh Posté le 28-02-2018 à 14:43:41
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 : |
Marsh Posté le 28-02-2018 à 15:31:04
"Expression régulière"
Marsh Posté le 28-02-2018 à 15:52:14
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.
Marsh Posté le 28-02-2018 à 17:13:52
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
pluj a déjà fait une bonne partie du code...
Marsh Posté le 01-03-2018 à 11:05:01
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
En shell script ( avec sed) c'est assez simple, avec PERL aussi, sinon python.
edit2 : avec sed
Code :
|
Marsh Posté le 02-03-2018 à 11:20:09
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
Marsh Posté le 02-03-2018 à 11:22:32
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 ).
Marsh Posté le 02-03-2018 à 11:34:19
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
Marsh Posté le 02-03-2018 à 11:41:50
avec sed, tu peux supprimer comme je te l'ai dit de la façon suivante :
|
edit : j'ai supprimé les caractères 4 à 7 de chaque ligne
Marsh Posté le 02-03-2018 à 11:46:06
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.
Marsh Posté le 28-02-2018 à 13:57:01
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
Message édité par satoshi2 le 28-02-2018 à 13:59:36