Gambas France BETA


Pas de compte ? Incription

Encore un petit souci de fichier...

1
AuteurMessages
Foromus#1 Posté le 12/2/2010 à 17:43:00
Bonjour,

Voilà, je créée un fichier, tout va bien, et je veux le remplir avec deux données par ligne : un article et un prix en face. Donc, je renseigne chaque ligne du genre :

PRINT #FichierData, Article, Prix

Et tout ça me fait un beau fichier qui, quand je l'ouvre, je vois :

ArticleTruc 1000
Article Machin 1200
ArticleChose 5000
........

Le souci, c'est pour lire. Je me suis dit que j'allais utiliser :

WHILE NOT Eof(FichierData)
LINE INPUT #FichierData, Nom, Prix,
Print Nom
Print Prix
Wend

Et non, ça ne colle pas !
D'abord, la virgule après Nom, est refusée, ensuite, et si je mets "Nom" tout seul, il me trouve, et le Nom, et le Prix, genre "ArticleChose 5000", tout dans la même variable, ce qui ne m'arrange pas du tout.

Bon, si ce n'est pas possible, je vais faire par deux lignes successives - je m'y retrouverai toujours bien, mais les deux données sur une seule ligne, ça me plaisait bien, d'autant que ça enregistre bien!

Si quelqu'un a une idée....
Merci grandement.
gambix#2 Posté le 12/2/2010 à 20:46:00
Faire simple !dim sValue as string
Dim aValues as String[]
WHILE NOT Eof(FichierData)
LINE INPUT #FichierData, sValue
aValues = Split(sValue," ")

Print "Nom=", aValues[0]
Print "Prix=", aValues[1]
Wend




ou

For each sLine in split(File.Load("MyFile"),"\n")

aValues = Split(sLine," ")
Print "Nom=", aValues[0]
Print "Prix=", aValues[1]

Next

Bien sur file.load reste valable pour des fichier pas trop conséquent
Moins de texte dans une signature c'est agrandir son espace.
Foromus#3 Posté le 13/2/2010 à 11:43:00
Bonjour,

Après nombre d'essais, je n'arrive pas à grand chose de concret.
Aux variables près, j'ai scrupuleusement recopié la procédure ci-dessous :

dim sValue as string
Dim aValues as String[]
WHILE NOT Eof(FichierData)
LINE INPUT #FichierData, sValue
aValues = Split(sValue," ")

Print "Nom=", aValues[0]
Print "Prix=", aValues[1]
Wend


J'ai mis des "Message.Info" un peu partout, pour voir, en fait, ça coince au niveau de :

variable = Split(sValue, "")

D'après les messages d'erreurs, il manquerait des crochets [] quelque part. J'ai essayé d'en ajouter, genre
variable = Split(sValue, "") [2]
puisque, en l'occurrence, il y a ici deux variables, mais ça ne passe pas.
Suivant la formulation, j'ai, soit Erreur type Mismacth, soit Outband (orthographe approximative).

Donc, là, je coince....
gambix#4 Posté le 13/2/2010 à 12:40:00
Faire simple !ton fichier comporte bien deux entrée séparée par 1 espace ?


data 100
data2 200
etc ?

si c'est pas le cas ...; (et ça doit l'être scupuleusement) ça peu planter
Moins de texte dans une signature c'est agrandir son espace.
Foromus#5 Posté le 13/2/2010 à 13:05:00
Mon fichier est comme indiqué dans mon premier post.
En fait, ce n'est pas forcément un espace. Quand je l'ouvre avec Nautilus, j'ai plutôt un espace de tabutaltion, copie partielle :

1
VignetteA 1500 VignetteB 1200 VignetteC 1900

etc...............
(La copie n'est pas exact, le forum refuse de reproduire les espaces entre le nom et le chiffre ! J'ai donc mis en code pour une image plus exacte)


Mais j'ai été surpris de trouver ça car à la création, j'avais fait :

PRINT #FichierData, "VignetteA", "1500",
PRINT #FichierData, "VignetteB", "1200",
PRINT #FichierData, "VignetteC", "1900",
etc..........

Et comme j'ai bien placé une virgule après le second élément, j'ai pensé que tout pouvait être enregistré à la suite.

Bon, sinon, je ferai :
PRINT #FichierData, "VignetteA",
PRINT #FichierData, , "1500",
PRINT #FichierData, "VignetteB",
PRINT #FichierData, "1500",
etc.....

Et là, je suis certain que ça va marcher...
gambix#6 Posté le 13/2/2010 à 13:38:00
Faire simple !bah aller cado ;)


aValue = scan(sValue, "* *")



sinon il faut lire un peu :

http://gambasdoc.org/help/lang/print?show&fr

Si le point virgule est doublé, un espace est généré entre les expressions.

donc tu devrait saisir :
PRINT #FichierData, "VignetteA";; "1500"

et ça devrait marcher
Moins de texte dans une signature c'est agrandir son espace.
jeanyvon#7 Posté le 13/2/2010 à 14:56:00
Gambas? Ma! Et gustoC'est pas pour dire mais depuis GW on a créé les bases de données!
JY :scratch:
Vieillir? On peut retarder mais pas y échapper!
Foromus#8 Posté le 13/2/2010 à 15:16:00
C'est pas pour dire mais depuis GW on a créé les bases de données!
JY :scratch:


Remarque ô combien sympathique, et que j'apprécie à sa juste pertinence éclairée...
Mais bon, je ne suis pas certain qu'une BdD soit justifiée pour mémoriser 10 trucs par ci, 20 trucs par là, et 5 choses par ailleurs, j'ai la naïveté de penser que cela concerne peut-être des choses plus conséquentes. Mais on peut toujours critiquer ou trouver à redire, c'est un bon moyen d'apprendre, même si parfois, c'est un peu "rugueux"...

Autre chose : les bases de données, je n'y connais franchement rien, cela fait partie des immenses connaissances que je n'ai pas encore acquises, et qu'il me reste à apprendre. Si la découverte de la pilule de la longévité n'est pas disponible dans les prochaines semaines, je crains le pire....
jeanyvon#9 Posté le 13/2/2010 à 15:38:00
Gambas? Ma! Et gustoC'est bien de savoir utiliser des fichiers texte;
Le temps que tu viens de passer (env 120 messages) t'aurais permis de savoir te servir d'1 BdD. Ce n'est pas le nombre d'enregistrements qui dicte le système mais la facilité de tri et d'utilisation. Ce que tu rentres dans tes fichiers texte n'est pas forcément dans l'ordre ou tu voudrais les voir apparaitre. Avec une BdD c'est simple pas avec des fichiers texte.
Et ce n'était pas une agression..... et ça ne l'est toujours pas...
:lol!:
JY
Vieillir? On peut retarder mais pas y échapper!
gambix#10 Posté le 13/2/2010 à 15:42:00
Faire simple !je te donne raison foromus, les base de donnée serve a stocker des donnée en grand nombre... pour ce qui est des fichier de configuration ou autre sois on se débrouille comme tu le fait a la main ou alors il y a gb.setting.



dans le domaine de l'informatique il y a des dévelloppeur système et des dévelloppeur bdd ... le domaine des base de donnée est tellement imence et complexe qu'il a sa propre qualification.

mais bon pour bidouiller ya pas tant a savoir que cela... c'est comme un grand tableau auquel on envois des requête (on demande ce qu'on veut)
Moins de texte dans une signature c'est agrandir son espace.
Foromus#11 Posté le 17/2/2010 à 19:45:00
Bien, je vous remercie, je fais avec ce que je sais dans le domaine ! Mes souhaits étant modestes, mes besoins le sont tout autant ! A moins que ce ne soit l'inverse ou réciproquement....
Peut-être que je me lancerai un jour dans les bases de données, si j'en ai le temps et surtout le besoin. Pour l'instant, j'essaie de concrétiser le peu que je sais.
Cela dit, je commence à "bidouiller" un peu avec Gambas, et au fur et mesure que je découvre, je reste toujours de plus en plus épaté. Beaucoup de ressemblances avec VB, ceci posé, c'est comme dans les langues étrangères : attention aux faux-amis...
Pour l'instant, et dans mon programme d'initiation, j'ai une quinzaine de petits fichiers, et ça se passe bien. J'ai pris l'habitude de considérer qu'il y avait retour chariot à chque donnée, et je fais avec, même si je construis le fichier avec un éditeur extérieur. Il faut simplement faire attention de ne pas mettre de retour à la dernière donnée, sinon, on a droit à une erreur à la lecture. Mais quand on le sait, on en tient compte et on n'y pense plus.
Je pose mon autre question sur un nouveau sujet, à propos justement des retours à la ligne.
1