tableau, liste chainée, procédure...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

je ferais comme çà moi ( si les lignes n'ont pas d'importance ) :

Code : Tout sélectionner

NewList ListeDeSprite.l()

If ReadFile(0,"sprites.txt")

  While ~Eof(0)
    
    ligne$ = ReadString()
    
    index = 0
    
    Repeat
      
      index + 1
      
      item$ = StringField( ligne$, index, " ")
      If item$ = "" : Break : EndIf
      
      AddElement( ListeDeSprite() )
      ListeDeSprite() = Val( item$ )
      
    ForEver
    
  Wend
  
  ForEach ListeDeSprite()
    Debug "N° de Sprite : "+Str(ListeDeSprite())
  Next
  
EndIf
Dernière modification par Flype le sam. 08/mai/2004 13:10, modifié 1 fois.
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

ou comme çà si les lignes ont leur importance :

Code : Tout sélectionner

Structure MonSprite
  Numero.l
  Ligne.l
EndStructure

NewList ListeDeSprite.MonSprite()

If ReadFile(0,"sprites.txt")
  
  nLigne = 0
  
  While ~Eof(0)
    
    nLigne + 1
    ligne$ = ReadString()
    
    index = 0
    
    Repeat
      
      index + 1
      
      item$ = StringField( ligne$, index, " ")
      If item$ = "" : Break : EndIf
      
      AddElement( ListeDeSprite() )
      ListeDeSprite()\Numero = Val( item$ )
      ListeDeSprite()\Ligne = nLigne
      
    ForEver
    
  Wend
  
  ForEach ListeDeSprite()
    Debug "N° de Sprite : "+Str(ListeDeSprite()\Numero)+" -- Ligne : "+Str(ListeDeSprite()\Ligne)
  Next
  
EndIf
Image
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Si c'est juste pour récupérer des chiffres de même type , il serait plus judicieux d'enregistre les données au format binaire, de plus ça serait extrèmement rapide , simple et moins volumineux.

Sinon, tu peux utiliser une zone de mémoire partagée, les deux processus accédant directement aux données mais ça dépend des capacités de tes deux logs.C'est pour ça que je voulais savoir avec quels logiciels tes 2 progs ont été créés.
Pierre
Messages : 244
Inscription : ven. 23/janv./2004 20:29
Localisation : 77 (Région parisienne)

Message par Pierre »

les lignes doivent toutes être de même longueur, je vois pas l'utilité de faire des lignes plus grandes que les autres.
puis dans ton exemple tu enlèves les espaces, ben c'est pas mon cas
un espace = un zéro
je prend les caractères du fichier 3 par 3
120 19 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0
10 19 8 17 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 0
0 9 8 7 6 5 4 3 2 1 101 2 3 4 5 6 7 8 9 0
0 9 8 37 16 5 4 3 62 1 1 2 3 4 5 6 7 8 9 0
0 9 48 7 6 5 4 3 52 1 1 2 93 4 5 6 7 8 9 0
ce qui donne (pour le début de la première ligne):
128
019
008
voila les valeurs qui seront mises dans le tableau
Image
Pierre
Messages : 244
Inscription : ven. 23/janv./2004 20:29
Localisation : 77 (Région parisienne)

Message par Pierre »

s'cuse nico j'avais pas vu ta réponse,
tu parle a moi ou a Flype?
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

@pierre

a mon avis il parle à toi

sinon ok, j'avais mal lu... donc les espaces = des "0"...
es-tu bloqué où çà va ?
en tout cas c simple à rajouter dans mon exemple la gestion des "0" :

Code : Tout sélectionner

Structure MonSprite
  Numero.l
  Ligne.l
EndStructure

NewList ListeDeSprite.MonSprite()

If ReadFile(0,"sprites.txt")
  
  nLigne = 0
  
  While ~Eof(0)
    
    nLigne + 1
    ligne$ = ReadString()
    
    index = 0
    
    Repeat
      
      index + 1
      
      item$ = StringField( ligne$, index, " ")
      If item$ = "" : Break : EndIf
      
      AddElement( ListeDeSprite() )
      ListeDeSprite()\Numero = Val( item$ )
      ListeDeSprite()\Ligne = nLigne
      AddElement( ListeDeSprite() )
      ListeDeSprite()\Numero = 0
      ListeDeSprite()\Ligne = nLigne
            
    ForEver
    
  Wend
  
  ForEach ListeDeSprite()
    Debug "N° de Sprite : "+Str(ListeDeSprite()\Numero)+" -- Ligne : "+Str(ListeDeSprite()\Ligne)
  Next
  
EndIf
Image
Pierre
Messages : 244
Inscription : ven. 23/janv./2004 20:29
Localisation : 77 (Région parisienne)

Message par Pierre »

bah non je suis pas bloqué

Si c'est juste pour récupérer des chiffres de même type , il serait plus judicieux d'enregistre les données au format binaire, de plus ça serait extrèmement rapide , simple et moins volumineux.

Sinon, tu peux utiliser une zone de mémoire partagée, les deux processus accédant directement aux données mais ça dépend des capacités de tes deux logs.C'est pour ça que je voulais savoir avec quels logiciels tes 2 progs ont été créés.
bah je verrais peut être ça plus tard, parce que ça m'embrouille un peu, je sais pas si j'ai le niveau pour faire ça...
Image
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Petit exemple d'écriture de chiffres en binaire:

Quand je vous disais que c'était simple!
Bien sûr, faut adapter suivant le cas.

Code : Tout sélectionner

If CreateFile(0, "c:\PureBasicTestFile.txt") 
  For a.l=1 To 100
    WriteLong(a) 
  Next a 
  CloseFile(0)
Else
  MessageRequester("PureBasic", "Error: can't write the file", 0)
  End
EndIf


If ReadFile(1, "c:\PureBasicTestFile.txt") 
  For a=1 To 100
    Nombre.l = ReadLong() 
    Debug Nombre
  Next a 
  CloseFile(1)
Else
  MessageRequester("PureBasic", "Error: Can't read the file", 0)
EndIf
Pierre
Messages : 244
Inscription : ven. 23/janv./2004 20:29
Localisation : 77 (Région parisienne)

Message par Pierre »

merci mais pour l'instant je vais rester comme ça, après je ferais un éditeur de tiles qui génèrera des fichiers comme tu l'as dit, pour l'instant je fais mes map a la main dans un fichier txt (c'est long et chi**t)
et puis pour encore 2 ou 3 raisons...
donc je ferais ce que tu dis mais je le ferais plus tard.
Image
Répondre