Lire une ligne spécifique dans un fichier.txt ou .ini
Lire une ligne spécifique dans un fichier.txt ou .ini
Bonjour à tous.
J'aimerais faire un jeu du pendu pour m'entraîner au PureBasic mais je rencontre un problème (parmi tant d'autres).
Je vais créer un fichier .txt ou .ini contenant un mot par ligne et faire ensuite un Random pour qu'il aille chercher au hasard un mot.
Mais je n'arrive pas à trouver le paramètre qui permet de faire ça. (J'ai déjà eu du mal à trouver le bon Read).
Donc si vous pouviez m'indiquer le chemin, merci. ^^
Et s'il vous plaît, je ne veux pas de code tout près, j'aimerais comprendre moi même.
Merci d'avance.
Ps : Pendant que j'y suis, il y a t il un moyen pour transformer une chaîne de caractère en *** ? Ou alors il faut passer par Len pour prendre le nombre de caractère, puis mettre autant de * que de caractère ?
J'aimerais faire un jeu du pendu pour m'entraîner au PureBasic mais je rencontre un problème (parmi tant d'autres).
Je vais créer un fichier .txt ou .ini contenant un mot par ligne et faire ensuite un Random pour qu'il aille chercher au hasard un mot.
Mais je n'arrive pas à trouver le paramètre qui permet de faire ça. (J'ai déjà eu du mal à trouver le bon Read).
Donc si vous pouviez m'indiquer le chemin, merci. ^^
Et s'il vous plaît, je ne veux pas de code tout près, j'aimerais comprendre moi même.
Merci d'avance.
Ps : Pendant que j'y suis, il y a t il un moyen pour transformer une chaîne de caractère en *** ? Ou alors il faut passer par Len pour prendre le nombre de caractère, puis mettre autant de * que de caractère ?
Si je peux faire une suggestion, écrit les mots dans un fichier texte et charge les dans un tableau. Ensuite faire une sélection aléatoire dans le tableau.
Si tu as besoin d'aide, n'hésite pas.
A+
Guimauve
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Gestion d'un tableau de mots
; Fichier : Source principal
; Version : 0.0.0
; Programmation : À compléter
; Programmé par : Guimauve
; Date : 19-10-2008
; Mise à jour : 19-10-2008
; Codé avec PureBasic V4.10
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Dim Mots.s(5)
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Initialisation des mots
Mots(0) = "Patate"
Mots(1) = "Poils"
Mots(2) = "orteille"
Mots(3) = "Cuisse"
Mots(4) = "Patte"
Mots(5) = "Tomate"
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Création du fichier txt
If CreateFile(0, "Mots.txt")
For Index = 0 To 5
WriteStringN(0, Mots(Index))
Next
CloseFile(0)
EndIf
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Lecture des mots depuis le fichier txt
; On utilise une liste car on ne sait pas le nombre
; de mot que le fichier texte contient.
NewList Mots2.s()
If ReadFile(1, "Mots.txt")
While Eof(1) = #Null
AddElement(Mots2())
Mots2() = ReadString(1)
Wend
CloseFile(1)
EndIf
; On demande le nombre de mot que la liste contient
Max.l = ListSize(Mots2()) - 1
; La boucle ici c'est pour la démonstration
For loop = 0 To 15
IndexA.l = Random(Max) ; On sélection un numéro aléatoire entre 0 et Max
Debug IndexA
SelectElement(Mots2(), IndexA)
Debug Mots2()
Debug ""
Next
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<
A+
Guimauve
Salut,
pour ton soucis de remplacement, intéresse toi à la la fonction ReplaceString() de la doc, les exemples sont claires.
Si tu galères, reviens nous voir.
pour ton soucis de remplacement, intéresse toi à la la fonction ReplaceString() de la doc, les exemples sont claires.
Si tu galères, reviens nous voir.

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
bonjour,
moi je ferai sa avec la fonction preferences()
dico : telecharger ici
@++
moi je ferai sa avec la fonction preferences()
dico : telecharger ici
Code : Tout sélectionner
;- Window Constants
Enumeration
#Window_0
EndEnumeration
;- Gadget Constants
Enumeration
#Button_0
#String_0
EndEnumeration
If OpenWindow(#Window_0, 0, 0, 220, 70, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Window_0))
ButtonGadget(#Button_0, 10, 10, 200, 25, "lancer un texte au hasard")
StringGadget(#String_0, 10, 40, 200, 20, "")
EndIf
EndIf
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #Button_0
OpenPreferences("dico.txt"); on ouvre le fichier texte
Result$ = ReadPreferenceString(Str(Random(20)), ""); la on donne le numero de la ligne et random(20) prend un nombre entre 0 et 20
SetGadgetText(#String_0, Result$); et la on renvoie Result$ dans un stringgadget()
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avec la Drooy's lib qui est devenue pour moi indispensable c'est super facile
Code : Tout sélectionner
IniWrite("c:\test.ini","section1","Key1Section1","data_Key1Section1")
IniWrite("c:\test.ini","section1","Key2Section1","data_Key2Section1")
IniWrite("c:\test.ini","section2","Key1Section2","data_Key1Section2")
IniRead("c:\test.ini","section1","Key1Section1")
IniRead("c:\test.ini","section1","Key2Section1")
IniRead("c:\test.ini","section2","Key1Section2")
Denis
Bonne Jounée à tous
Bonne Jounée à tous
+1 brossden, même si les commandes de PB 4.20 Read/Writepreference() rendent un peu obsolète ces fonctions de la droopy lib
Code : Tout sélectionner
If CreatePreferences("Preferences.prefs")
PreferenceGroup("Global")
WritePreferenceString("ApplicationName", "MP3 Player")
WritePreferenceString("Version", "1.1b")
PreferenceComment(" This is the Window dimension")
PreferenceComment("")
PreferenceGroup("Window")
WritePreferenceLong ("WindowX", 123)
WritePreferenceLong ("WindowY", 124)
WritePreferenceFloat("WindowZ", -125.5)
ClosePreferences()
EndIf
OpenPreferences("Preferences.prefs")
PreferenceGroup("Window")
Debug ReadPreferenceLong ("WindowX", 0)
Debug ReadPreferenceLong ("WindowY", 0)
Debug ReadPreferenceFloat("WindowZ", 0)
PreferenceGroup("Global")
Debug ReadPreferenceString("ApplicationName", "")
Debug ReadPreferenceString("Version", "")
ClosePreferences()
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Merci pour votre aide mais je suis un peu perdu tellement il y en a... ^^
Mon code c'est ça pour l'instant :
J'aimerais juste une commande qui permet de sélectionner une ligne spécifique dans le fichier.
Par exemple au lieu de " mot$ = ReadString(dico) ", un truc du genre " mot$ = ReadString(dico, 2) " Ça lirait la ligne 2 du fichier dico.
Bien sur ce n'est qu'un exemple mais c'est quelque chose dans ce genre là.
Et pouvez vous me décrire les fonctions que vous utilisez ? Car vous me donnez un code déjà fait (dont je ne comprends pas tout) et j'aimerais adapter les fonctions à mon code.
Donc pouvez vous me dire comment marchent vos fonctions ?
Merci d'avance.
Mon code c'est ça pour l'instant :
Code : Tout sélectionner
OpenConsole()
EnableGraphicalConsole(1)
ConsoleTitle("Le jeu du Pendu !")
Resultat = ReadFile(dico, "dico.txt")
mot$ = ReadString(dico)
PrintN("Le mot est " +mot$)
PrintN("")
PrintN("")
PrintN("")
PrintN("")
PrintN("")
PrintN("Appuyer sur Entree pour quitter")
Input()
Par exemple au lieu de " mot$ = ReadString(dico) ", un truc du genre " mot$ = ReadString(dico, 2) " Ça lirait la ligne 2 du fichier dico.
Bien sur ce n'est qu'un exemple mais c'est quelque chose dans ce genre là.
Et pouvez vous me décrire les fonctions que vous utilisez ? Car vous me donnez un code déjà fait (dont je ne comprends pas tout) et j'aimerais adapter les fonctions à mon code.
Donc pouvez vous me dire comment marchent vos fonctions ?
Merci d'avance.
Apparemment tu es un vrai débutant...
Voiçi un code qui devrait faire ce que tu veux. Cependant moi j'utiliserais un tableau pour plus de simplicité.
A+
Guimauve
Voiçi un code qui devrait faire ce que tu veux. Cependant moi j'utiliserais un tableau pour plus de simplicité.
Code : Tout sélectionner
Procedure.s ReadStringInFile(FileID, LineIndex)
If LineIndex = 0
LineIndex = 1
EndIf
For Index = 1 To LineIndex
x_iemeChaine.s = ReadString(FileID)
Next
ProcedureReturn x_iemeChaine
EndProcedure
OpenConsole()
EnableGraphicalConsole(1)
ConsoleTitle("Le jeu du Pendu !")
Resultat = ReadFile(dico, "dico.txt")
mot$ = ReadStringInFile(dico, 3) ; la 3e ligne. On commence à 1
PrintN("Le mot est " +mot$)
PrintN("")
PrintN("")
PrintN("")
PrintN("")
PrintN("")
PrintN("Appuyer sur Entree pour quitter")
Input()
Guimauve
Merci pour cette réponse rapide.
Je vais essayer de déchiffrer tout ça ^^.
Sinon, j'ai suivi un cours de PureBasic et j'ai toujours pas compris à quoi servait une Procédure... Et comme j'ai vu que tu en utilise une, tu pourrais m'expliquer ?
J'ai compris que toutes les variables déclaré dans une procédures peuvent uniquement être utilisé dans cette procédure.
Mais j'vois pas trop à quoi ça sert...
Si on veut pas utiliser les une variable quelque part, on l'utilise pas...
Edit : Ligne 9, #File Objetc not initialized...
J'ai un peu de mal à comprendre (oui je suis un vrai débutant ^^ Un pur un dur ^^).
Je vais essayer de déchiffrer tout ça ^^.
Sinon, j'ai suivi un cours de PureBasic et j'ai toujours pas compris à quoi servait une Procédure... Et comme j'ai vu que tu en utilise une, tu pourrais m'expliquer ?
J'ai compris que toutes les variables déclaré dans une procédures peuvent uniquement être utilisé dans cette procédure.
Mais j'vois pas trop à quoi ça sert...
Si on veut pas utiliser les une variable quelque part, on l'utilise pas...
Edit : Ligne 9, #File Objetc not initialized...
J'ai un peu de mal à comprendre (oui je suis un vrai débutant ^^ Un pur un dur ^^).
Nouvelle version du code précédent. Je me suis rendu compte d'un problème si on voulant lire la ligne après la ligne 3 par exemple.
La variable Global peut-être modifié de partout dans le programme principal et dans les procédures. Sauf que moi je déteste ça, pour un programme simple ça peut toujours aller mais pour un gros programme on fini par être a court de nom pour les variables.
A+
Guimauve
Code : Tout sélectionner
Procedure.s ReadStringInDico(DicoFileName.s, LineIndex)
If ReadFile(0, DicoFileName)
If LineIndex = 0
LineIndex = 1
EndIf
For Index = 1 To LineIndex
x_iemeChaine.s = ReadString(FileID)
Next
CloseFile(0)
EndIf
ProcedureReturn x_iemeChaine
EndProcedure
OpenConsole()
EnableGraphicalConsole(1)
ConsoleTitle("Le jeu du Pendu !")
mot$ = ReadStringInFile("dico.txt", 3)
PrintN("Le mot est " +mot$)
PrintN("")
PrintN("")
PrintN("")
PrintN("")
PrintN("")
PrintN("Appuyer sur Entree pour quitter")
Input()
D'ordinaire on créer une procédure afin de grouper des instructions de base pour faire quelque chose de plus complexe. Dans la nouvelle version j'ai une procédure qui se charge d'ouvrir le dictionnaire, de lire toute les chaines jusqu'à ce qu'on lise celle qui nous intéresse. Ensuite on ferme le fichier et on retourne la chaine qu'on avait de besoin.Sinon, j'ai suivi un cours de PureBasic et j'ai toujours pas compris à quoi servait une Procédure... Et comme j'ai vu que tu en utilise une, tu pourrais m'expliquer ?
Une autre façon de faire du code précédent :J'ai compris que toutes les variables déclaré dans une procédures peuvent uniquement être utilisé dans cette procédure.
Mais j'vois pas trop à quoi ça sert...
Si on veut pas utiliser les une variable quelque part, on l'utilise pas...
Code : Tout sélectionner
Global mot$
Procedure ReadStringInDico(DicoFileName.s, LineIndex)
If ReadFile(0, DicoFileName)
If LineIndex = 0
LineIndex = 1
EndIf
For Index = 1 To LineIndex
mot$ = ReadString(FileID)
Next
CloseFile(0)
EndIf
EndProcedure
OpenConsole()
EnableGraphicalConsole(1)
ConsoleTitle("Le jeu du Pendu !")
ReadStringInFile("dico.txt", 3)
PrintN("Le mot est " +mot$)
PrintN("")
PrintN("")
PrintN("")
PrintN("")
PrintN("")
PrintN("Appuyer sur Entree pour quitter")
Input()
Est-ce que le fichier dico.txt est dans le même répertoire que le code source que tu compile ?Edit : Ligne 9, #File Objetc not initialized...
J'ai un peu de mal à comprendre (oui je suis un vrai débutant ^^ Un pur un dur ^^).
A+
Guimauve
Oui le fichier est dans le même répertoire.
Et sinon, je crois avoir compris.
Enafites on peut, avec les procédures, avoir 2 fois la même variables. Enfin 2 fois le même nom non ?
Par exemple :
J'espère avoir bien compris ^^
Et sinon, je crois avoir compris.
Enafites on peut, avec les procédures, avoir 2 fois la même variables. Enfin 2 fois le même nom non ?
Par exemple :
Code : Tout sélectionner
Procédure 1
blabla
life=500
blabla
EndProcédure
Procédure 2
blabla
life=1000
blabla
EndProcédure
Je me permet de te proposer une solution pour créer ton dico par le code ci-après :
Le code qui fait suite te permettra de lire ce "Dico" et de tirage au hasard un mot parmi ceux en mémoire
Code : Tout sélectionner
;Création d'un fichier contenant les différents mots à découvrir grâce au jeu du pendu.
CreateFile(1,"Dico.txt")
;Ecriture de quelques mots à trouver mais il est possible de rajouter autant de mot sur une ligne que l'on veut avec un editeur type notepad par exemple
WriteStringN(1,"PUZZLES")
WriteStringN(1,"AVIRONS")
WriteStringN(1,"COULEUR")
WriteStringN(1,"VOITURE")
WriteStringN(1,"SKIEUSE")
WriteStringN(1,"AÉRONEF")
; Fermeture du fichier
CloseFile(1)
Code : Tout sélectionner
;Ouverture du fichier
OpenFile(1,"Dico.txt")
; Mise en mémoire de touts les mots du 'Dico' dans une liste chainée
NewList Mots.s()
While Not Eof(1)
AddElement(Mots())
Mots()= ReadString(1)
Wend
CloseFile(1)
;Tirage au hasard du numéro d'un mot
RandomSeed(Second(Date()))
For n=1 To 3
X = Random(ListSize(Mots())) -1
SelectElement(Mots(),X)
MessageRequester("Résultat"," Le mot qui sera à trouver est : " + Mots() )
Next)
Denis
Bonne Jounée à tous
Bonne Jounée à tous
Feinteur d'utiliser la dateRandomSeed(Second(Date()))

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels