Ecrtiure ligne en fortrant

Ecrtiure ligne en fortrant - VB/VBA/VBS - Programmation

Marsh Posté le 11-06-2006 à 20:44:04    

Bonjour  
 
je dois effectuer un code visual basic qui va prendre des infos dans un fichier 1 pour les écrire dans un fichier 2 qui celui-ci doit être écrit en mettant les bonnes infos dans les bonnes colonnes.
 
par exemple  
 
RI1000                                 0.0000                          1.200
RI1                                  400.0000                           0.237
 
Voilà ma question
 
je travaille avec des mid pour isolé les différents éléments et ensuite je concatène le tout en introduisant les espaces à la main, mais un problème ce pose par exemple  
 

Code :
  1. strLigneStationMes = strLigneStationMes & strHauteurStation & "       " & strNomOP & "  " & strerr_moy_moy


 
Mais voilà le problème cette méthode marche bien pour autant que ce qui suit le RI soit toujours de la même grandeur car si une fois c'est 1000 et une autre fois 10 ce qui suit sera décalé.  
 
Aurait-il une autre possibilité de faire ça, par exemple de dire à vb de déplacer le curseur à la colonne xxx et d'écrir l'autre variable. Ce qui donnerai un truc comme ça :
 

Code :
  1. strLigneStationMes = strLigneStationMes & strHauteurStation & va colone 38 & strNomOP & va colonne 68 & strerr_moy_moy


 
merci d'avance pour vos réponse.

Reply

Marsh Posté le 11-06-2006 à 20:44:04   

Reply

Marsh Posté le 12-06-2006 à 01:43:26    

Quid du format du fichier1 ?  
Beaucoup plus de données seraient bienvenues
 
Pour le fichier2
Sous Excel avec une police non proportionnelle Courier, Courier New par exemple
voilà ce que tes données montrent


         1         2         3         4         5         6         7         8         9  
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
RI1000                                 0.0000                          1.200
RI1                                  400.0000                           0.237


 
Est ce que le positionnement des 1er datas  
 se fait par rapport au . ? 41 eme caractère ou démarre au 40eme
Est ce que le positionnement des 2nd datas  
 se fait par rapport au . ? 73 eme caractère ou démarre au 72eme
ou autrement à toi de préciser et s'il y a des données supplémentaires  
ou démarrent-elles ?
 
Anecdotiquement cela me rappelle un traitement via Excel que j'avais fait il y a  
qqs annéees pour recadrer des infos topos PC texte transmises au géovecteur RS6000/Unix pour insertion dans traitement de données géophysiques


Message édité par kiki29 le 12-06-2006 à 08:43:48
Reply

Marsh Posté le 12-06-2006 à 12:00:34    

Hello
 
Merci beaucoup pour ton bout de code, j'ai vu ton message privé mais quelques explication serait le bien venu si je peux te le demander.
 

Code :
  1. Private Sub Test()
  2. Dim s As String
  3.     s = "RI1                                                          456400.00000                           0.237"
  4.    
  5. La je ne comprend pas DebuG
  6. Debug.Print FormaterChaine(s)
  7.     s = "RI2000         12890.00001235                               1.200"
  8.     Debug.Print FormaterChaine(s)
  9.     s = "RI300         1212.007895632                                   12311.200"
  10.     Debug.Print FormaterChaine(s)
  11. End Sub


 
 
 
 
 
 
 

Code :
  1. Private Function FormaterChaine(ByVal Chaine As String) As String
  2. Dim strG As String, strM As String, strD As String
  3. Dim strEspaceL As String, strEspaceR As String
  4. Dim PosEspace As Integer, PosDecimal As Integer
  5. Les constante espace ?
  6. Const Espace As String * 1 = " "
  7. Const Decim As String * 1 = "."
  8. ' Position séparateur décimal
  9. En fait ca change tjrs en fonction du nombre de chiffre avant et après ??
  10. Const PosChaineM As Integer = 40
  11. Const PosChaineR As Integer = 72
  12.       Je ne comprend pas strG   
  13.     PosEspace = InStr(Chaine, Espace)
  14.     strG = Left(Chaine, PosEspace - 1)
  15.    
  16. 'comprend pas la InStrRev
  17.     PosEspace = InStrRev(Chaine, Espace)
  18.     strD = Right(Chaine, Len(Chaine) - PosEspace)
  19.     'je ne comprend pas la fonction TRIM
  20.     strM = Trim(Mid(Chaine, Len(strG) + 1, Len(Chaine) - Len(strD) - Len(strG)))
  21.    
  22.     PosDecimal = InStr(strM, Decim)
  23.    
  24.     strEspaceL = String(PosChaineM - Len(strG) - PosDecimal, Espace)
  25.    
  26.     PosDecimal = InStr(strD, Decim)
  27.     strEspaceR = String(PosChaineR - Len(strG) - Len(strEspaceL) - Len(strM) - PosDecimal, Espace)
  28.    
  29.     FormaterChaine = strG & strEspaceL & strM & strEspaceR & strD
  30. End Function


 
En fait si je comprend bien Len(strG) renvoie le nombre de caractère de la variable strG et Len(
 
 
Oui l'alignement ce fait par les séparateur décimale
 
En fait c'est presque pour le même domaine d'activité, en fait c'est pour transformer une fichier résultat de mesure en un fichier comptatible avec le logiciel de compensation LTOP.
 
Structure fichier 1
 
1.   No Point : 1                
                direction moyenne:             0.00000g
                   Haut.Réflt. :              0.2370m[/cpp]
 
en fait les datas 2 doivent être aligne au point à la colonne 73
 
Merci pour tes conseilles qui me dépatouille pas mal !!!!!!  :hello:  
 

Reply

Marsh Posté le 12-06-2006 à 13:15:28    

Pour les instructions utilisées il faut chercher dans l'aide en ligne.
Les lignes dans Test() sont justes là pour tester le traitement des chaines dans la fenêtre exécution: sous VBA : Affichage | Fenêtre exécution  
 
si Décimal 2eme colonne en 73
changer Const PosChaineR as integer = 72 en 73

Reply

Marsh Posté le 12-06-2006 à 13:18:38    

Merci je vais dépatouiller tout ca !!!  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed