par roubech » 24 Sep 2010 à 00:51
tu peux ouvrir 2 fichiers en parallèle
[syntax="LotusScript"]Dim nFileNumIn as Integer
Dim nFileNumOut as Integer
Dim sFilePathIn as String
Dim sFilePathOut as String
Dim sLineIn as String
Dim sLineOut as String
sFilePathIn = "data.txt"
sFilePathOut = "data_modifie.txt"[/syntax]
le 1er en lecture
[syntax="LotusScript"]Open sFilePathIn for Input as nFileNumIn [/syntax]
le 2nd en ecriture
[syntax="LotusScript"]Open sFilePathIn for Output as nFileNumOut [/syntax]
tu parcours le premier pour le lire ligne par ligne
[syntax="LotusScript"]While not Eof(nFileNumIn)
Line Input nFileNumIn, sLineIn
' ...
Wend[/syntax]
Tu fais ta transformation sur la chaine de texte
[syntax="LotusScript"] sLineOut = left(sLineIn,5)+"452"+right(sLineIn,length(sLineIn)-5)[/syntax]
Et tu écris la nouvelle ligne dans le nouveau fichier
[syntax="LotusScript"] print nFileNumOut, sLineOut[/syntax]
A la fin, tu fermes les 2 fichiers
[syntax="LotusScript"]close nFileNumIn
close nFileNumOut[/syntax]
Mais si j'ai bien suivi, pour la transformation, ça ne concerne que les lignes commençant par E
[syntax="LotusScript"] if Left(sLineIn,1) = "E" Then
sLineOut = ' ....
Else
sLineOut = sLineIn
End if[/syntax]
Et en plus, il faut d'abord séparer la ligne en 3 chaines distinctes.
Si ta ligne est découpée avec un séparateur bien défini comme un espace (ou un ; pour le format csv)
[syntax="LotusScript"] Dim values as Variant
values = split(sLineIn, " ")[/syntax]
ou si elle est découpée en fonction de la position
[syntax="LotusScript"] Dim values as Variant
values(0) = Mid(sLineIn, 1, 5)
values(1) = Mid(sLineIn, 5, 10)
values(2) = Mid(sLineIn, 15, 10)[/syntax]
si tu veux remplacer l'info du milieu values(1) qui vaut par exemple "0000000000" par "00000007" sachant que tu as le nombre 7 dans une variable newValue, il te faut alors ajouter le nombre de zero adéquate, ou autre technique, tu ajoutes les 10 "0" devant ton nombre et tu ne prend que les 10 derniers caractères
[syntax="LotusScript"] sLineOut = "E" & values(0) & Right("0000000000" & newValue, 10) & values(2)[/syntax]