Page 1 sur 1

Besoin de conseille sur le traitements de données [résolu]

Publié : ven. 28/mai/2010 14:03
par MetalOS
Salut tout le monde, pour améliorer un de mes logiciels je doit traiter le contenus d'un fichier text, le voici :

Code : Tout sélectionner

Latitude : 42.683060112 - Longitude : 3.6909340445
Latitude : 42.6680327896 - Longitude : 3.6909340445
Latitude : 42.6530054672 - Longitude : 3.6909340445
Latitude : 42.6980874344 - Longitude : 3.7142856928
Latitude : 42.683060112 - Longitude : 3.7142856928
Latitude : 42.6680327896 - Longitude : 3.7142856928
Latitude : 42.6530054672 - Longitude : 3.7142856928
Latitude : 42.6379781448 - Longitude : 3.7142856928
Latitude : 42.683060112 - Longitude : 3.7376373411
Latitude : 42.6680327896 - Longitude : 3.7376373411
Latitude : 42.6530054672 - Longitude : 3.7376373411
Latitude : 46.8756830616 - Longitude : 5.6291208534
Latitude : 46.8606557392 - Longitude : 5.6291208534
Latitude : 46.8456284168 - Longitude : 5.6291208534
Latitude : 46.890710384 - Longitude : 5.6524725017
Latitude : 46.8756830616 - Longitude : 5.6524725017
Latitude : 46.8606557392 - Longitude : 5.6524725017
A savoir que sont contenus peut varier de 0 ligne à plusieurs centaine de lignes car je le consulte à intervalle régulier. Mon problème et que je doit lire ligne par ligne, et stocker dans une variable string la valeur de la latitude, et dans une autre variable string la valeur de la longitude, et faire ca pour chaque lignes.

Pensez vous que les listes chainées et une bonne solution ?

Re: Besoin de conseille sur le traitements de données

Publié : ven. 28/mai/2010 14:09
par Backup
...............

Re: Besoin de conseille sur le traitements de données

Publié : ven. 28/mai/2010 14:21
par MetalOS
C'est ce qui me semble le plus simple aussi Dobro. Pour le moment j'arrive juste à récupérer le dernier chiffre.

Code : Tout sélectionner

If ReadFile(1,"Donnees.txt")
 Ligne.s = ReadString(1)
 
 While Not Eof(1)
  Ligne.s = ReadString(1)
  
  For x=1 To 3 ;(nombre de :) 
   info.s = StringField(Ligne.s, x, ":") ;découpage de la chaîne Ligne.s 
  Next x
   Debug info.s 
   
 Wend
 
 CloseFile(1)
EndIf 

Re: Besoin de conseille sur le traitements de données

Publié : ven. 28/mai/2010 14:40
par kernadec
bonjour MetalOs

tu trouveras des données d'atlas préformatée ici:http://www.southville.net/astrolog32/fr/atlas.html
mais si le formatage te conviens pas
on peut facilement l'adapter avec un éditeur du style UTRAEDIT

Cordialement

Re: Besoin de conseille sur le traitements de données

Publié : ven. 28/mai/2010 14:46
par MetalOS
Non ce sont des données que je reçoit d'un site météo et que je doit traiter pour les positionner sur carte, d'où l'aide que tu ma fournit à ce sujet :wink: .

Re: Besoin de conseille sur le traitements de données

Publié : ven. 28/mai/2010 15:30
par MetalOS
Bon j'avance tous doucement. J'arrive avec ce code à créer un fichier long.txt et un fichier lat.txt.

Dans le fichier long.txt ce trouve toute les longitude du fichier données.txt après découpage.

Dans le fichier lat.txt ce trouve toute les latitude du fichier données.txt après découpage.

Seulement dans le fichier lat.txt il me reste ca :

Code : Tout sélectionner

42.683060112 - Longitude 
Alors qu'il devrait me rester uniquement ca :

Code : Tout sélectionner

42.683060112
Voici mon code :

Code : Tout sélectionner

If ReadFile(1,"Donnees.txt")
 Ligne.s = ReadString(1)
 
 ;DateTime.s = StringField(Ligne,1,";")+" : "
 ; Debug DateTime.s
If CreateFile(2, "lat.txt") 

If CreateFile(3, "long.txt")
  
   While Not Eof(1)
    Ligne.s = ReadString(1)
     ;Debug Ligne.s
 
    For x=1 To 2 ;(nombre de :) 
     info.s = StringField(Ligne.s, x, ":") ;découpage de la chaîne Ligne.s 
    Next x
     Debug info.s 
      WriteStringN(2, info.s)  

    For x=1 To 3 ;(nombre de :) 
     info2.s = StringField(Ligne.s, x, ":") ;découpage de la chaîne Ligne.s 
    Next x
     Debug info2.s 
    WriteStringN(3, info2.s) 
   
   Wend
 
   CloseFile(2)
EndIf
 
   CloseFile(3)
EndIf 
 
   CloseFile(1)
EndIf 
Je n'arrive pas à découper mieux pour les latitude.

Re: Besoin de conseille sur le traitements de données

Publié : ven. 28/mai/2010 15:46
par lepiaf31
Je ne sais pas si j'ai bien compris ton problème mais moi j'aurais fait comme ca (tout bêtement j'ai envi de dire) :

Code : Tout sélectionner

path.s = "Donnees.txt"  ; <== chemin vers Donnees.txt

Structure Position
  lat.s  ;latitude
  long.s  ;longitude
EndStructure

NewList Positions.Position()  ;liste des positions

;récupération des données
file = OpenFile(#PB_Any, path)
If file
  While Eof(file) = 0
    string.s = ReadString(file)
    AddElement(Positions())
    Positions()\lat = StringField(string, 3, " ")
    Positions()\long = StringField(string, 7, " ")
  Wend
  CloseFile(file)
EndIf

;Affichage des données
ForEach Positions()
  Debug "Latitude: "+Positions()\lat+"  Longitude: "+Positions()\long
Next

Re: Besoin de conseille sur le traitements de données

Publié : ven. 28/mai/2010 15:48
par Backup
.................

Re: Besoin de conseille sur le traitements de données

Publié : ven. 28/mai/2010 16:06
par MetalOS
Putain oui comment je me prend la tête pour rien 8O :oops: :oops: :oops:

Merci les gars.

Re: Besoin de conseille sur le traitements de données

Publié : ven. 28/mai/2010 16:28
par lepiaf31
Dobro a écrit : arf !! grillé par l'oiseau (sous Linux , je suis plus lent :lol: )
Piaf 1 - 0 Pingouin xD

Re: Besoin de conseille sur le traitements de données [résol

Publié : ven. 28/mai/2010 16:29
par G-Rom
l'utilisation massive des maps est très bien pour le stockage :

Code : Tout sélectionner

Global Map RegionMap.s()

RegionMap("Aquitaine")                  =     "97"
RegionMap("Auvergne")                   =     "98"
RegionMap("Basse-Normandie")            =     "99"
RegionMap("Bourgogne")                  =     "A1"
RegionMap("Bretagne")                   =     "A2"
RegionMap("Centre")                     =     "A3"
RegionMap("Champagne-Ardenne")          =     "A4"
RegionMap("Corse")                      =     "A5"
RegionMap("Franche-Comte")              =     "A6"
RegionMap("Haute-Normandie")            =     "A7"
RegionMap("Ile-de-France")              =     "A8"
RegionMap("Languedoc-Roussillon")       =     "A9"
RegionMap("Limousin")                   =     "B1"
RegionMap("Lorraine")                   =     "B2"
RegionMap("Midi-Pyrenees")              =     "B3"
RegionMap("Nord-Pas-de-Calais")         =     "B4"
RegionMap("Pays de la Loire")           =     "B5"
RegionMap("Picardie")                   =     "B6"
RegionMap("Poitou-Charentes")           =     "B7"
RegionMap("Provence-Alpes-Cote d'Azur") =     "B8"
RegionMap("Rhone-Alpes")                =     "B9"
RegionMap("Alsace")                     =     "C1"



Structure Ville
  Latitude.s
  Longitude.s
EndStructure

Structure Region
  List Villes.Ville()
EndStructure

Structure Pays
  List Regions.Region()
EndStructure



France.Pays
Region$ = RegionMap("Haute-Normandie")

France\Regions(Region$)\Villes("Le Havre")\Latitude   = "1w17"
France\Regions(Region$)\Villes("Le Havre")\Longitude  = "49n31"

Re: Besoin de conseille sur le traitements de données [résol

Publié : ven. 28/mai/2010 17:40
par Backup
ce que tu dis G-rom est vrais , pour touts ce qui a besoin d'etre indexé
mais pour juste des valeurs , ma fois les listes chainée c'est pas mal :)

par contre s'il voulait ajouter le nom de la ville avec les coordonnées , là ; ok ! :)

Re: Besoin de conseille sur le traitements de données [résol

Publié : ven. 28/mai/2010 18:02
par lepiaf31
Complétement d'accord, c'est très pratique pour faire une application multi-langues. Il suffit de faire un truc du genre:

fichier anglais;

Code : Tout sélectionner

hello = hello
bye = bye
fichier francais:

Code : Tout sélectionner

hello = bonjour
bye = au revoir
et ensuite on charge le fichier que l'on veut en fonction de la langue:

Code : Tout sélectionner

Procedure lang_load(fileName.s, Map lang.s())
  Protected file, string.s, count=0
  
  If FileSize(fileName) > -1
    file = OpenFile(#PB_Any, fileName)
    If file
      While Eof(file) = 0
        string = ReadString(file)
        If Left(string, 1) <> ";" ;ce n'est pas une ligne de commentaire
          lang(Trim(StringField(string, 1, "="))) = Trim(StringField(string, 2, "="))
          count+1
        EndIf
      Wend
      CloseFile(file)
      ProcedureReturn count
    EndIf
  EndIf
  
  ProcedureReturn 0
EndProcedure

NewMap test.s()
lang_load("francais", test())
Debug test("hello")
et voilà ^^

Re: Besoin de conseille sur le traitements de données [résol

Publié : ven. 28/mai/2010 18:09
par G-Rom
Dobro a écrit :ce que tu dis G-rom est vrais , pour touts ce qui a besoin d'etre indexé
mais pour juste des valeurs , ma fois les listes chainée c'est pas mal :)

par contre s'il voulait ajouter le nom de la ville avec les coordonnées , là ; ok ! :)

les fichiers contiennent énormément de valeurs , si tu as besoin de retrouvé rapidement une valeur ( les coordonnées d'une ville par exemple :) )
tu n'as pas besoin de faire une itération jusqu'à ce que tu trouve ce que tu cherches.
Imagine que tu as 50.000 ville , et que en permanence tu as besoin de lire des valeurs , tu ne vas pas parcourir tes 50.000 éléments à chaque fois.
la map te permet sans itération de retrouvé ce que tu cherches , le hic , c'est que ca bouffe plus de ram , mais bon , le choix est vite vu ! :D