Extraire les donnes d'un fichier text a partir d'une combobox.

je dois obtenir le contenu d’une ligne x d’un fichier txt par l’intermédiaire d’une combobox.
Fichier txt contient des données astrométriques d’un catalogue stellaire comme ceci:

Acamar |2.971027|-40.304713|-0.00391|0.0194|2.9|
Achernar |1.62857|-57.236889|0.0117|-0.0347|0.6|
Acrux |12.443298|-63.09905|-0.005|-0.0121|1.1|
Adhara |6.977097|-28.972083|0.0003|0.003|1.6|
… …
… …

dans la combobox ne figure que les noms :
Acamar
Achernar
Acrux
Adhara

En cliquant sur le nom, la ligne correspondante est appelée.
où puis je trouver un exemple similaire ?

Si je comprend bien, vous voulez que lorsque l’utilisateur slectionne par example “Acrux” dans la ComboBox, la ligne Acrux |12.443298|-63.09905|-0.005|-0.0121|1.1| est extraite du fichier ?

Vous pouvez obtenir cela en chargeant le fichier texte dans un TextIntupStream, avec quelque chose comme :

dim ligne as string dim choix as string = "Acrux" // Valeur choisie dans la ComboBox ... ligne = TextInputStream.ReadLine if instr(ligne,choix)>0 then msgbox ligne end if

J’ai fait comme suit:

  Dim f As FolderItem
  dim stream as textinputstream
  dim ligne as string
                           
  Choix ="Acrux"
  
  f = GetFolderItem("NavFolder\avStars.txt")   
  
  If f <> Nil Then
     stream = TextInputStream.Open(f)
    
    Do
       ligne = Stream.ReadLine
      if instr(ligne,choix)>0 then
        msgbox ligne
      end if
    Loop Until stream.EOF
       stream.Close
   End if

il ne se passe rien, egalement avec: ligne = TextInputStream.ReadLine.

[quote=110303:@Djamel AIT AMRANE]J’ai fait comme suit:

  Dim f As FolderItem
  dim stream as textinputstream
  dim ligne as string
                           
  Choix ="Acrux"
  
  f = GetFolderItem("NavFolder\avStars.txt")   
  
  If f <> Nil Then
     stream = TextInputStream.Open(f)
    
    Do
       ligne = Stream.ReadLine
      if instr(ligne,choix)>0 then
        msgbox ligne
      end if
    Loop Until stream.EOF
       stream.Close
   End if

il ne se passe rien, egalement avec: ligne = TextInputStream.ReadLine.[/quote]

La bonne syntaxe est ligne = Stream.ReadLine telle que vous l’avez entrée.

Êtes-vous sûr du chemin dans f = GetFolderItem("NavFolder\avStars.txt") ?

Si le chemin est invalide, cela expliquerait que rien ne se passe. Je vous recommande plutôt d’employer le chemin complet, commençant par C:\. Tel qu’il est, votre fichier se trouverait dans un sous folder du folder où se trouve votre exécutable.

J’ai cre NavFolder dans lequel j’ai mis NavStars.txt et d’autre fichiers.
J’ai accroch NavFolder au projet comme suit:

J’ai essay avec le chemin complet du fichier:
f = GetFolderItem(“C:\Program Files(x86)\Xojo\Xojo\2014r1.1\Ephemerides\avFolder\avStars.txt”)
en vain .

[code] Dim f As FolderItem
dim stream as textinputstream
dim ligne as string

Choix =“Acrux”

f = GetFolderItem(“C:\Program Files(x86)\Xojo\Xojo\2014r1.1\Ephemerides\avFolder\avStars.txt”)

If f <> Nil Then
Stream = TextInputStream.Open(f)
Do
ligne = TextInputStream.ReadLine ???
if instr(ligne,choix)>0 then
msgbox ligne
end if
Loop Until stream.EOF
stream.Close
End if
[/code]

Avec, ligne = TextInputStream.ReadLine => “this Item does not exist”

[quote=110420:@Djamel AIT AMRANE]J’ai creé NavFolder dans lequel j’ai mis NavStars.txt et d’autre fichiers.
J’ai accroché NavFolder au projet comme suit: [/quote]

Attention, Xojo ne traite pas du tout les fichiers ajoutés au project de la même façon que VB. Les fichiers sont vus comme des variables, et les dossiers ne sont là que pour organiser la vue dans le projet.

Vous devez donc créer un dossier sur le disque, où vous placez le fichier à lire. Le plus recommandé consiste à utiliser un sous répertoire dans SpecialFolder.ApplicationData dans lequel vous créez le fichier à partir de ce que vous avez ajouté au projet.

Vous pouvez créer ce dossier quand vous lancez l’application. Par exemple :

dim f as folderitem = SpecialFolder.ApplicationData.child("NavFolder") if not f.Exists then f.CreateAsFolder end if // Copy the variable NavStars which is the file you added to your project to NavStars.txt inside with a TextOutputStream ... ...

Vous pouvez créer tous les fichiers dont vous avez besoin, et les retrouver chaque fois que votre programme se lance.

Non. Utilisez la variable Stream que vous avez créée.

ligne = Stream.ReadLine

Je ne sais pas si j’ai bien compris, a ne donne rien avec cette criture; ce code est il correcte ?

dim stream as textinputstream
dim ligne as string

Choix =“Acrux”

dim f as folderitem = SpecialFolder.ApplicationData.child(“NavFolder”)
if not f.Exists then
f.CreateAsFolder
end if

f = getFolderItem(“C:\Program Files(x86)\Xojo\Xojo\2014r1.1\Ephemerides\avFolder\avStars.txt”)

If f <> Nil Then
Stream = TextInputStream.Open(f)
Do
ligne = Stream.ReadLine
if instr(ligne,choix)>0 then
msgbox ligne
end if
Loop Until stream.EOF
stream.Close
End if

window1.txtligne.text =ligne

[quote=110611:@Djamel AIT AMRANE]Je ne sais pas si j’ai bien compris, ça ne donne rien avec cette écriture; ce code est il correcte ?

dim stream as textinputstream
dim ligne as string

Choix =“Acrux”

dim f as folderitem = SpecialFolder.ApplicationData.child(“NavFolder”)
if not f.Exists then
f.CreateAsFolder
end if

f = getFolderItem(“C:\Program Files(x86)\Xojo\Xojo\2014r1.1\Ephemerides\avFolder\avStars.txt”)

If f <> Nil Then
Stream = TextInputStream.Open(f)
Do
ligne = Stream.ReadLine
if instr(ligne,choix)>0 then
msgbox ligne
end if
Loop Until stream.EOF
stream.Close
End if

window1.txtligne.text =ligne[/quote]

Quelle erreur avez vous ?

Le code que j’ai post plus haut ne donne rien, si le fichier n’est pas trouv il y aurait un message.
malheureusement il ne se passe rien, aucune erreur n’est signale.

Quand vous faites un :

if f<>nil then

Ce qui serait bien c’est d’ajouter un “sinon” :

else msgbox "Fichier Invalide : nil" end
Ca permet quand mme d’avoir une aide efficace.

En gnral, je n’utilise jamais de chemin complet dans XoJo.

Pour retrouver le chemin du dossier de l’application :

f = getfolderitem("")

On peut aussi trouver le fichier executable par :

f = App.ExecutableFile

Ensuite, j’utilise la mthode child pour descendre dans la hirarchie (c’est mieux pour la compatibilit Mac/Windows) :

f = getfolderitem("").Child("Dossier Travail")

Et sinon, quand on veut effectuer une lecture de fichier, il est prfrable de spcifier l’encodage :

stream = TextInputStream.Open(f) stream.Encoding = Encodings.WindowsLatin1
ou

stream = TextInputStream.Open(f) stream.Encoding = Encodings.UTF8

Avec cette criture j’obtiens effectivement le msg : “Fichier Invalide : nil”, je ne trouve pas o est le dfaut.

[code]
dim stream as textinputstream
dim ligne as string

Choix =“Acrux”

dim f as folderitem = SpecialFolder.ApplicationData.child(“NavFolder”)

f = getFolderItem(“NavFolder\avStars.txt”)

If f <> Nil Then
Stream = TextInputStream.Open(f)
else
msgbox “Fichier Invalide : nil”
end if

Do
ligne = Stream.ReadLine
if instr(ligne,choix)>0 then
msgbox ligne
end if
Loop Until stream.EOF
stream.Close[/code]

Mathieu, j’ai mis : f = getFolderItem(“C:\avFolder\avStars.txt”) , a marche comme a avec le rep. a la racine.

c’est dj un problme en partie rgl, mais je ne sais toujours pas comment appel des fichiers situs dans le Folder de Xojo.

merci Michel, merci Mathieu, ainsi qu’a tous ceux qui ont contribu a rsoudre ce problme.

Oups, je n’avais tout vu.

Si tu as mis un fichier texte dans la racine de Xojo. C’est encore beaucoup plus simple.

Tu utilise ce texte simplement comme une variable string. Pas besoin de le lire…