PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Remplacer ligne par autre ligne dans fichier texte
Remplacer ligne par autre ligne dans fichier texte
Débuté par Nico, 19 sep. 2018 16:27 - 4 réponses
Membre enregistré
2 messages
Posté le 19 septembre 2018 - 16:27
Bonjour,

Je suis sous la version windev 20.
Je cherche a ouvrir un fichier texte, puis le parcourir et remplacer certaine ligne puis enregistrer le fichier texte.

Pour l'instant j'arrive ouvrir le ficher puis le parcourir, mais je n'arrive pas a remplacer les lignes désirer.

Voici un exemple du fichier en question:
Version 300
Charset "Neutral"
Delimiter ","
Unique 2
Index 2
CoordSys EPSG:4326 Bounds (-180, -90) (180, 90)
Columns 34
Num_affaire Char(11)
Record_Number Integer
Gd_Info Char(20)

Region 1
8
0.0699647508912687 43.2981449959216
0.0703085136166206 43.297152083047
Pen (5,0,16757504)
Brush (1,0,16777215)
Region 1
5
0.0653919104445423 43.3022879502253
0.0654002766228093 43.302066596456
0.0658478501158941 43.3020756165794
Pen (7,5,16787518)
Brush (1,0,16777215)

Je cherche a remplace les ligne qui contiennent pen(x,x,xxxxxxxx) par pen(y,y,yyyyyyyy)
Les valeurs x peuvent varier par contre les valeur y que je souhaite mettre seront fixe.

Voici mon code pour l'instant:

sNomfic est une chaîne = SAI_import_txt // SAI_import_txt me permet d'aller chercher mon fichier txt dans l'exporateur windows

ContenuFichier est un entier
sMaligne est une chaîne


ContenuFichier = fOuvre(SAI_import_txt,foLectureEcriture)

SI ContenuFichier = -1 ALORS
Erreur("impossible")
FIN
sMaligne = fLitLigne(ContenuFichier)
TANTQUE sMaligne<>EOT
SI sMaligne = fCherche(ContenuFichier,"pen") ALORS
fEcrit(ContenuFichier," Pen (5,0,12345678)")

FIN
sMaligne = fLitLigne(ContenuFichier)

ToastAffiche("modif effectué",toastCourt,cvMilieu,chCentre)

FIN

Merci par avance pour tout l'aide que vous pourrez m'apporter.
Message modifié, 19 septembre 2018 - 16:30
Membre enregistré
1 623 messages
Popularité : +100 (114 votes)
Posté le 19 septembre 2018 - 17:12
Hello, a tester (Ecrit sans windev, ya ptete des fautes de syntaxe) :
sTexteModifié est une chaîne = ""
sTexte est une chaîne = fChargeTexte(SAI_import_txt) // Charge le contenu dans sTExte
SI sTexte<> "" ALORS // si le contenu n'est pas vide
POUR TOUTE chaîne sLigne de sTexte SEPAREE PAR RC // On parcours ligne par ligne le fichier, on stock la ligne dans sLigne
SI sLigne [= "Pen(" ALORS sLigne = " Pen (5,0,12345678)" // Si Sligne commence par "Pen(" alors on remplace par ce que l'on veut
sTexteModifié += sTexteModifié = "" ? sLigne SINON RC+sLigne // On reconstruit le fichier texte ligne par ligne (modifiée au non)
FIN
FIN
fSauveTexte(SAI_import_txt,sTexteModifié) // On ecrase l'ancien fichier
Membre enregistré
165 messages
Popularité : +12 (12 votes)
Posté le 20 septembre 2018 - 08:40
Bonjour;
// Déclaration des variables
FichierSélectionné , sLigne est une chaîne
nIDFichier, nFermefichier est un entier
sContenuDuFichier est une chaîne

// Sélection du nom et du chemin du fichier
FichierSélectionné = fSélecteur("", "", "Sélection d'un fichier", "Fichier Texte" + TAB + "*.txt", "txt", fselOuvre)
SI FichierSélectionné <>"" ALORS
// Ouverture du fichier
nIDFichier = fOuvre(FichierSélectionné , foLectureEcriture)
// Affichage du message d'erreur si l'ouverture n'a pas été effectuée
SI nIDFichier = -1 ALORS
Erreur(ErreurInfo(errMessage))
SINON
// Traitement
sLigne = fLitLigne(nIDFichier)
TANTQUE sLigne<>EOT
SI sLigne = "Pen (7,5,16787518)" ALORS // ici c'est en dur, à remplacer par le nom du champ de la chaine recherchée
sContenuDuFichier += "TARATATA"+RC // ici par le nom du champ de la nouvelle chaine
SINON
sContenuDuFichier += sLigne+RC
FIN
sLigne = fLitLigne(nIDFichier)
FIN
fSauveTexte(FichierSélectionné,sContenuDuFichier)
nFermefichier = fFerme(nIDFichier)
SI nFermefichier = -1 ALORS
Erreur(ErreurInfo(errMessage))
SINON
Info("Bingo")
FIN
// Fin Traitement
FIN
FIN


Bon Dev.
Membre enregistré
2 messages
Posté le 20 septembre 2018 - 16:30
MERCI !!!! Beaucoup à tous les deux.

J'ai fais un mix entre les deux car les valeur x du pen(x,x,xxxxxx) peuvent être différentes donc j'ai pris le second code que j'ai modifié de façon a se qu'il cherche une ligne qui commence par "pen(" comme dans le premier code.

Voici mon code final pour les prochains qui souhaiteraient faire comme moi:

// Déclaration des variables
FichierSélectionné , sLigne est une chaîne
nIDFichier, nFermefichier est un entier
sContenuDuFichier est une chaîne

// Sélection du nom et du chemin du fichier
FichierSélectionné = fSélecteur("", "", "Sélection d'un fichier", "Fichier Texte" + TAB + "*.txt", "txt", fselOuvre)
SI FichierSélectionné <>"" ALORS
// Ouverture du fichier
nIDFichier = fOuvre(FichierSélectionné , foLectureEcriture)
// Affichage du message d'erreur si l'ouverture n'a pas été effectuée
SI nIDFichier = -1 ALORS
Erreur(ErreurInfo(errMessage))
SINON
// Traitement
sLigne = fLitLigne(nIDFichier)
TANTQUE sLigne<>EOT
SI sLigne [= " Pen (" ALORS // // Si Sligne commence par " Pen (" alors on remplace par:
sContenuDuFichier += " Pen (5,0,12345678)"+RC // ici par le nom du champ de la nouvelle chaine
SINON
sContenuDuFichier += sLigne+RC
FIN
sLigne = fLitLigne(nIDFichier)
FIN
fSauveTexte(FichierSélectionné,sContenuDuFichier)
nFermefichier = fFerme(nIDFichier)
SI nFermefichier = -1 ALORS
Erreur(ErreurInfo(errMessage))
SINON
Info("Bingo")
FIN
// Fin Traitement
FIN
FIN
Posté le 21 septembre 2018 - 12:06
Bonjour.

perso comme Francois C. j'aurais plutot utilisé

sTexte est une chaîne = fChargeTexte(SAI_import_txt)

tu as déjà tout ton texte dans une variable chaine

apres suffit de faire un truc du genre

npos est un entier = Position(sTexte ,"Pen (")

puis rechercher la chaine complete avec
nposfin est un entier = Position(sTexte ,")",npos+1)
//(je recherche la fin de la chaine par le carapater ")" )

puis machaine = stexte[npos,nposfin+1]

manouvellechaine = "Pen (5,0,12345678)"

et remplace(stexte,machaine,manouvellechaine)

enfin
fsauvetexte ....


tu mets ça dans une boucle si besoin...