Traitement sur chaine de caractères

Bonjour, j’aimerais transformer une ligne dans un fichier qui ressemble à ceci :

1111#2222#3333#4444#5555#6666#7777#8888#9999#1111#…

en un fichier qui donnerait cela :

1111
2222
3333
4444
5555
6666
7777
8888
9999
1111

Quelqu’un saurait quel commande il faut utiliser sous linux ?
D’avance merci.

perl -i -p -e ‘s/#/\n/g;’ ton_fichier

<?php
//
foreach (explode( '#', 'taligne') as $ligne) { fwrite( $fichier ,$ligne."\n"); }
//
?>

Merci !!!

Ca a fonctionné avec la commande perl !

Pour la commande PHP, je n’ai pas testé, mais la syntaxe me semble bonne.

Merci beaucoup.

Tr est fait pour ça sinon

sinon il y a sed

awk doit pourvoir le faire mais c’est pas pratique.

Solution en Python, en décomposant les mouvements:


# -*- coding: utf-8 -*-

ligne = '1111#2222#3333#4444#5555#6666#7777#8888#9999#1111#'

liste = []
chaine = ''

for element in ligne:
    if element <> '#':
        chaine = chaine + element
    if element == '#':
        liste.append(chaine)
        chaine = ''
        
for element in liste:
    print element

Et voici sans décomposer les mouvements (split fait l’équivalent de la première boucle).

[code]#!/usr/bin/python

-- coding: utf-8 --

import string
ligne = ‘1111#2222#3333#4444#5555#6666#7777#8888#9999#1111#’

for elem in ligne.split(’#’):
print elem[/code]

Et la méthode la plus courte :

[code]#!/usr/bin/python

-- coding: utf-8 --

import string
ligne = ‘1111#2222#3333#4444#5555#6666#7777#8888#9999#1111#’

print ligne.replace(’#’,’\n’)[/code]
Utiliser replace est vraiment plus léger car on ne fait que remplacer un caractère par un autre. Il n’y a pas création d’une liste et copie (même légère) de chaque chaine. En plus on se limite à une seule écriture ce qui est plus léger aussi. Ça s’applique à tout les langages que ce soit écris en PHP, python ou autre. Après pour un programme si court peut être que le import string va modifier la donne. Sinon pourquoi générer une liste ?

[code]#!/usr/bin/python

-- coding: utf-8 --

ligne = ‘1111#2222#3333#4444#5555#6666#7777#8888#9999#1111#’

chaine = ‘’

for element in ligne:
if element <> ‘#’:
chaine = chaine + element
if element == ‘#’:
print chaine
chaine = ‘’
[/code]

Bonjour à tous,

je viens de découvrir que gvim accepte des commandes au lancement, donc pour convertir
1111#2222#3333#4444#5555… en
1111
222
333

il y a aussi la commande: gvim “+%s/#/\r/g” “+wq” leFichier

Marrant non ? :smt026 , On peut faire plein de trucs avec debian, :smt117

-_-'
vim, gvim utilisent les commandes ed. sed utilise aussi ce type de commande. Donc autant utiliser sed, non ?

comme dit plus haut