tonbosto
Messages postés7Date d'inscriptionvendredi 14 mars 2008StatutMembreDernière intervention16 mars 2008
-
16 mars 2008 à 14:07
tonbosto
Messages postés7Date d'inscriptionvendredi 14 mars 2008StatutMembreDernière intervention16 mars 2008
-
16 mars 2008 à 23:13
Bonjour ,
J'essaie de lire un fichier txt de la forme suivante:
5.0000000E+00 .0000000E+00 2.5000000E+01
-5.0000000E+00 .0000000E+00 2.5000000E+01
5.0000000E+00 .0000000E+00 1.2990381E+01
-5.0000000E+00 .0000000E+00 1.2990381E+01
5.0000000E+00 -1.0000000E+01 .0000000E+00
...
J'arrive à lire les lignes, mais je dois stocker les différentes valeur de ce fichier dans trois colonnes.
J'utilise la fonction Split pour differencier les trois termes d'une ligne, mais à la deuxiéme ligne , le -5.000... n'est pas stocké.
J'ai essaié en enlevant le "-" et la ca fonctionne, donc le probléme viendrai de ce signe.
Par la suite j'ai une erreur après la ligne 2 du fichier txt.
Voici le code :
Try
Dim monFichier
As StreammonFichier = File.OpenRead(Chemin)
Dim monStreamReader
As
New StreamReader(monFichier, System.Text.Encoding.ASCII)
'Stream pour la lecture
Dim ligne
As
String
' Variable contenant le texte de la ligne
Dim Stock()
As
String
ligne = 0
MsgBox(
"coucou")
While monStreamReader.Peek() > -1ligne = monStreamReader.ReadLine
'lecture de la ligneMsgBox(ligne, MsgBoxStyle.OkCancel)
'TRAITEMENT A EFFECTUER SUR LA LIGNEStock = Split(ligne,
" ")
If Stock(1) <>
""
ThenMsgBox(Stock(1))
End
If
If Stock(2) <>
""
ThenMsgBox(Stock(2))
End
If
If Stock(3) <>
""
ThenMsgBox(Stock(3))
End
If
If Stock(4) <>
""
ThenMsgBox(Stock(4))
End
If
'MsgBox(Stock(5))
End
WhileMsgBox(
"finProcess")monStreamReader.Close()
Catch ex
As ExceptionMsgBox(
"Une erreur est survenue au cours de l'accès en lecture du fichier de configuration du logiciel.")
End
Try
Else : MsgBox(
"Veuillez spécifier un chemin de fichier valide", MsgBoxStyle.Exclamation)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 16 mars 2008 à 15:43
Le problème viens du fait que tu fat un split sur l'espace, ensuite tu considère que ta première valeur est renvoyer dans la seconde colonne (index 1) et pour cause, la première ligne commence par un espace. LA fonction Split considèrera donc que tu as une colonne vide en début de ligne.
Ce qu'il faut que tu fasse, je pense c'est systématiquement supprimer les espaces en début de chaque ligne (voir méthode Trim) avant de faire le split.
De ce fait ainsi la première valeur sera dans la première colonne (index 0) et tu devrait la récupérer aussi lorsque qu'elle est négative.
tonbosto
Messages postés7Date d'inscriptionvendredi 14 mars 2008StatutMembreDernière intervention16 mars 2008 16 mars 2008 à 17:49
Merci pour la piste mais je viens d'enlever à la main les espaces en début de ligne.
Il ne me prend meme plus la première valeur de la ligne et s'arrete à la fin de celle ci.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 16 mars 2008 à 18:14
Ce code devrait pourtant marcher :
Try
Dim monFichier As Stream
monFichier = File.OpenRead(Chemin)
Dim monStreamReader As New StreamReader(monFichier, System.Text.Encoding.ASCII) 'Stream pour la lecture
Dim ligne As String ' Variable contenant le texte de la ligne
Dim Stock() As String
ligne = ""
MsgBox("coucou")
While monStreamReader.Peek() > -1
ligne = monStreamReader.ReadLine 'lecture de la ligne
MsgBox(ligne, MsgBoxStyle.OkCancel)
'TRAITEMENT A EFFECTUER SUR LA LIGNE
Stock = Split(ligne.TrimStart," ")
If Stock(0) <> "" Then MsgBox(Stock(0))
If Stock(1) <> "" Then MsgBox(Stock(1))
If Stock(2) <> "" Then MsgBox(Stock(2))
If Stock(3) <> "" Then MsgBox(Stock(3))
End While
MsgBox("finProcess")
monStreamReader.Close()
Catch ex As Exception
MsgBox("Une erreur est survenue au cours de l'accès en lecture du fichier de configuration du logiciel.")
End Try
Je ne peux malheureusement pas le tester, j'ai VB2005 en rade en ce moment, je vais etre obliger de fromater je pense
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 16 mars 2008 à 19:05
arf, vérifie que tu as bien un espace qui te sépare les 2 valeurs.
Si ce n'est pas le cas, c'est que tes champs ne sont pas en réalité séparés par un séparateur, mais au contraire c'est des champs de largeurs fixe.
Dans ce cas, c'est pas le split qu'il faut utiliser, il faut découper ta ligne à la main.
1ere valeur du caractère 0 au caractère x
2nd valeur du caractère x+1 au caractère y
3eme valeur de y+1 à z ........
C'est un peu le doute que j'avais eu au départ quand j'ai vu les données que tu as mis en exemple
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 16 mars 2008 à 21:17
Tant qu'à faire, je te donne le format du fichier
Par ligne :
- Champ1
- Tabulation
- Champ2
- Tabulation
- Champ3
- Saut de ligne
LA ligne est effectivement terminée seulement par le caractère Saut de ligne at non pas comme habituellement ar le couple Saut de ligne/Retour chariot
Pour chaque champ :
- signe (absent si positif)
- unité (absent si 0)
- séparateur décimal : le point
- décimales au nombre de 7
- caractère exposant
- signe de l'exposant
- 2 chiffres pour l'exposant
soit un total de 14 caractères par champs et 45 caractères par lignes
tonbosto
Messages postés7Date d'inscriptionvendredi 14 mars 2008StatutMembreDernière intervention16 mars 2008 16 mars 2008 à 23:13
Ca fonctionne, j'ai découper les lignes comme tu me l'as dis. J'ai utilisé la fonction Mid (string, start, longueur) pour ca. J'ai voulu utiliser les fonctions Right et Left, mais je sais pas pourquoi cela ne voulais pas.