Supprimer ": :" dans un document.txt
Jillow
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai un ficher in_4799 , et je voudrais faire un script en C pour supprimer automatiquement quand il y a "::" qui suit un + quand la ligne commence par PCI.
Voici a quoi ressemble le ficher in_4799 :
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+::CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
CST+1+T:120+T2:105++732599:169'
GID+6+1:PK'
FTX+AAA+++ALUMINIUM PNEUMATIC MECHANICAL PART'
MEA+AAE+G+KGM:226'
MEA+AAE+AAW+MTQ:37.351'
SGP+GLDU9388840+1'
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+::CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
CST+1+T:120+T2:105++841290:169'
GID+7+5:PK'
FTX+AAA+++DUCTILE IRON CAST ARTICLES'
MEA+AAE+G+KGM:2346.6'
MEA+AAE+AAW+MTQ:37.351'
SGP+GLDU9388840+5'
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+::CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
Après le script le fichier devrait ressembler a ça :
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
CST+1+T:120+T2:105++732599:169'
GID+6+1:PK'
FTX+AAA+++ALUMINIUM PNEUMATIC MECHANICAL PART'
MEA+AAE+G+KGM:226'
MEA+AAE+AAW+MTQ:37.351'
SGP+GLDU9388840+1'
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
CST+1+T:120+T2:105++841290:169'
GID+7+5:PK'
FTX+AAA+++DUCTILE IRON CAST ARTICLES'
MEA+AAE+G+KGM:2346.6'
MEA+AAE+AAW+MTQ:37.351'
SGP+GLDU9388840+5'
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
merci d'avance.
j'ai un ficher in_4799 , et je voudrais faire un script en C pour supprimer automatiquement quand il y a "::" qui suit un + quand la ligne commence par PCI.
Voici a quoi ressemble le ficher in_4799 :
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+::CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
CST+1+T:120+T2:105++732599:169'
GID+6+1:PK'
FTX+AAA+++ALUMINIUM PNEUMATIC MECHANICAL PART'
MEA+AAE+G+KGM:226'
MEA+AAE+AAW+MTQ:37.351'
SGP+GLDU9388840+1'
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+::CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
CST+1+T:120+T2:105++841290:169'
GID+7+5:PK'
FTX+AAA+++DUCTILE IRON CAST ARTICLES'
MEA+AAE+G+KGM:2346.6'
MEA+AAE+AAW+MTQ:37.351'
SGP+GLDU9388840+5'
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+::CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
Après le script le fichier devrait ressembler a ça :
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
CST+1+T:120+T2:105++732599:169'
GID+6+1:PK'
FTX+AAA+++ALUMINIUM PNEUMATIC MECHANICAL PART'
MEA+AAE+G+KGM:226'
MEA+AAE+AAW+MTQ:37.351'
SGP+GLDU9388840+1'
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
CST+1+T:120+T2:105++841290:169'
GID+7+5:PK'
FTX+AAA+++DUCTILE IRON CAST ARTICLES'
MEA+AAE+G+KGM:2346.6'
MEA+AAE+AAW+MTQ:37.351'
SGP+GLDU9388840+5'
PCI+24+AS PER INVOICE::CONTAINER NO.?::GLDU9388840::AGENT SEAL NO.?::IN0344370::CUSTOM SEAL NO.:?:2222486'
PCI+24+CONTAINER NO.?:2::FCIU4781107 /:20 FT:::AGENT SEAL NO.?::IN0423237'
PCI+24+:CUSTOM SEAL NO.:?:2222485'
merci d'avance.
2 réponses
-
En Python3, cela donnerait :
import re f = open('in_4799') for line in f: m = re.match(r"(^PCI.*?\+)::(.*$)", line) if m: print(m.group(1)+m.group(2)) else: print(line, end='') f.close()
Si+::
peut apparaître plusieurs fois sur une ligne commençant par PCI, il faut modifier le code pour appliquer la regexp sur la ligne lue tant que la regexp est matchée (ce n'est pas le cas dans le jeu de données que tu fournis).
En C il faudrait une bonne centaine de lignes, sauf si tu utilises une bibliothèque gérant les regexp.
Dal-
-
-
Parce qu'aucun fichier "in4799" ne se trouve à cet emplacement ?
Dans ton message d'origine tu indiquais que le fichier était "in_4799" et pas "in4799" comme tu l'as écrit.
Vérifie aussi s'il n'y a pas d'extension . Tu es visiblement sous Windows, et ce système d'exploitation aime bien "simplifier la vie" des utilisateurs en masquant les extensions "connues" dans le gestionnaire de fichiers. Si ton fichier a une extension .txt et que tu ne pas précises pas dans ton programme, Python ne le trouvera pas. -
-
-
-
Bonjour Jillow,
Il est possible de le faire en C, mais utiliser un langage de script comme Perl permettrait de le faire en moins de 5 lignes de code (ou en Python en un peu plus).
Pourquoi veux-tu le faire en C ?
Dal