Supprimer ": :" dans un document.txt

Fermé
Jillow - Modifié le 14 janv. 2020 à 10:05
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 16 janv. 2020 à 13:17
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.
A voir également:

2 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 15 janv. 2020 à 00:17
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
2
Jillow Messages postés 9 Date d'inscription mardi 14 janvier 2020 Statut Membre Dernière intervention 19 avril 2020
15 janv. 2020 à 08:10
OK merci pour ton aide.
0
Jillow Messages postés 9 Date d'inscription mardi 14 janvier 2020 Statut Membre Dernière intervention 19 avril 2020
15 janv. 2020 à 09:49


Juste un dernier service, tu sais comment m'aider parce que je comprend pas pourquoi il trouve pas le fichier.

-Jillow
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083 > Jillow Messages postés 9 Date d'inscription mardi 14 janvier 2020 Statut Membre Dernière intervention 19 avril 2020
Modifié le 15 janv. 2020 à 10:27
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.
0
Jillow Messages postés 9 Date d'inscription mardi 14 janvier 2020 Statut Membre Dernière intervention 19 avril 2020 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
15 janv. 2020 à 11:27
D'accord je vais essayer mettre l'extension et le "_" c'est juste que je l'ai oublier ????
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083 > Jillow Messages postés 9 Date d'inscription mardi 14 janvier 2020 Statut Membre Dernière intervention 19 avril 2020
15 janv. 2020 à 18:39
c'est toi qui vois (tu peux voir ce que tu as), je me contente d'essayer de deviner et je ne peux pas voir à ta place :-)
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
14 janv. 2020 à 13:14
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
1
Jillow Messages postés 9 Date d'inscription mardi 14 janvier 2020 Statut Membre Dernière intervention 19 avril 2020
14 janv. 2020 à 22:03
Parce que j'ai quelques bases en C mets le python me conviendrait parfaitement.
0