Txt inclus dans un exe [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Txt inclus dans un exe [Résolu]

Message par Kwai chang caine »

Bonjour à tous.

J'aimerais inclure un simple TXT dans un exe déja compilé.
Et cerise sur le ponpon, je voudrais pouvoir le modifier par exemple en l'extrayant, le modifiant, puis le réinclure en ecrasant le précédent dans l'executable. :roll: ou encore mieux pouvoir l'editer dans un listview (par exemple, ou tout autre support de lecture) puis le réinclure dans l'exe à sa place prévu à cet effet.

En gros, faire un "mini access" avec sa petite base de donnée incluse, sauf que un texte d'une centaine de lignes me suffirait.

J'ai vu pas mal de code d'inclusion dans un exe sur le forum, mais je m'y suis un peu perdu, beaucoup incluent des sons, des images, dans certains y'a que l'inclusion à la creation de l'executable et pas en cours, etc ....

En fait, j'aimerais qu'il y ai un espece de reservoir qui peut etre vide a la compilation de l'executable, et que l'on peut remplir en cours, revider et modifier.

Si quelqu'un connait un POST qui en parle.....ou a dans sa hotte une petite merveille de la sorte, je lui en serais reconnaissant sur 3 générations :lol:

Je vous remercie
Bonne journée
Dernière modification par Kwai chang caine le dim. 15/avr./2007 9:09, modifié 5 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je te remercie DOBRO. 8)
Toujours aussi rapide pour degainer un code. :D

Nous serions au far-west tu serais "redoutable", encore mieux que le magasin :lol: (Jeu de mot, maitre .....)

Bonne journée à toi
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je viens d'essayer, c'est super.

Par contre, comment faire pour gerer les retour a la ligne.
J'ai tenté de charger le txt entier de 3 ko dans une variable, mais ça s'arrette au premier chr(13). 8O

En plus comme mon TXT fait 3ko et qu'apparement il faut mettre en data autant d'espace, je devais faire tenir sur la meme ligne 3000 espaces.... , j'ai essayé en copier coller et ça a planté le PC 8O

Peut etre en chargeant un tableau et en sauvegardant ce dernier d'un coup dans l'emplacement ????

Faut il que je les remplace par un caractere de delimitation, ou bien y'a encore une autre combine que je ne connait pas.
erix14
Messages : 480
Inscription : sam. 27/mars/2004 16:44
Contact :

Message par erix14 »

Cette méthode est du bidouillage, tous les pros utilisent les bases de registre :

Code : Tout sélectionner

Procedure.s ReadRegKey(OpenKey.l, SubKey$, Valuename$)
	hkey.l = 0
	KeyValue$ = Space(10000)
	DataSize.l = 10000
	If RegOpenKeyEx_(OpenKey, SubKey$, 0, #KEY_READ, @hkey)
		KeyValue$ = "Entrez un texte, puis fermer l'application, ensuite relancer"+Chr(13)+" l'application. Le texte est toujours là... Dans cet "+Chr(13)+"exemple, le texte est limité à 10000 caractères."
	Else
		If RegQueryValueEx_(hkey, Valuename$, 0, 0, @KeyValue$, @DataSize)
			KeyValue$ = "Error Reading Key"
		Else
			KeyValue$ = Left(KeyValue$, DataSize - 1)
		EndIf
		RegCloseKey_(hkey)
	EndIf
	ProcedureReturn KeyValue$
EndProcedure
Procedure WriteRegKey(OpenKey.l, SubKey$, KeySet$, KeyValue$)
	hkey.l = 0
	If RegCreateKey_(OpenKey, SubKey$, @hkey) = 0
		result = 1
		DataSize.l = Len(KeyValue$)
		If RegSetValueEx_(hkey, KeySet$, 0, #REG_MULTI_SZ, @KeyValue$, DataSize) = 0
			result = 2
		EndIf
		RegCloseKey_(hkey)
	EndIf
	ProcedureReturn result
EndProcedure


If OpenWindow(0, 0, 0, 322, 150, "EditorGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0)) 
	EditorGadget(0, 8, 8, 306, 133) 
	SetGadgetText(0, ReadRegKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\\RX14", "Data"))
	Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
	WriteRegKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\\RX14", "Data", GetGadgetText(0))
EndIf 
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour erix14

Tu as surement raison, mais justement, j'suis loin de meriter meme le "P" de pro :cry:

C'est super ton code, mais il inscrit sur UNE machine les données.

Ce que je voulais faire , c'est que mon programme puisse recreer un fichier que quelqu'un aurait malencontreusement ou intentionnellement effacé.
Donc il faut que ces données soit dans le PRG et pas dans la BDR
Quoi qu'il en soit je le garde bien pour une prochaine utilisation et te remercie. 8)

Ce sont les parametres de mon prg que j'ai créé dans un fichier "parametres.conf".
- Le bleme c'est que si une burne comme moi, efface ce fichier mon prg ne marche plus.
- Si j'ecris tous les parametres en dur dans le code ils ne sont plus modifiables.
- Si je ne fait qu'inclure le txt a la compilation, vu que je ne compilerais qu'une fois puis le distribue, je ne peux pas modifier mon fichier conf interne

Donc je m'etait dit, le prg va voir si son fichier conf est la....si oui pas de bleme.
Sinon, il ressort de ses datas le fichier conf (comme le lapin du chapeau :lol: ) et peut de nouveau le lire et basta.

J'aurais juste rajouté une fonction qui permette de modifier les datas dans l'exe, si je veux modifier mon conf interne, pour la prochaine restauration.

Je ne sais pas si je suis assez clair avec mes idées tordues :roll:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Kwai chang caine a écrit :
Donc je m'etait dit, le prg va voir si son fichier conf est la....si oui pas de bleme.
Sinon, il ressort de ses datas le fichier conf (comme le lapin du chapeau :lol: ) et peut de nouveau le lire et basta.
dans ce cas,
dans ton prg principal:
tu fait simplement une verif, que le fichier "conf" est present au moment du lancement, et si c'est pas le cas, tu genere un fichier conf de base !!

avec une succession de "writestring" qui va ecrire des parametres par defaut !.......


si les paramètres doivent changer par la suite, tu n'aura qu'a faire un petit prg de patch qui sera constitué lui aussi que d'une succession de "writestring" (seulement la procedure d'ecriture de fichier utilisé dans le prg principal :D )avec les nouvelles valeur que tu désire ... :D
et qui va ecraser le Conf présent !!


pourquoi veut tu faire compliquer, quelque chose de simple :lol: :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

C'est a dire que je ne voulais distribuer qu'un seul prg avec tout le jus dedans :D

En fait, ce que j'ai oublié de dire c'est que le conf change de jours en jours.
Donc j'aurais aimé que:

- si ya conf --> ya bien et ya mémorisation si different de celui présent en interne
- si ya pas conf --> ya réecriture sur le disque du dernier conf mémorisé dans le réservoir à conf :lol:

Et tout ça en auto à chaque démarrage de mon prog

En fin de compte c'est une histoire de "conf" :lol: :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je viens de faire un code à mon avis un peu merdique (Normal j'suis spécialiste :lol: ), en partant de celui du soldat.
J'ai utilisé le générateur de DATA de droopy pour inserer un fichier vide balisé en début et fin.

J'ai donc inséré tout ce beau monde dans une procedure.
Et apparement ça marche.

J'ai fait une autre procedure qui permet de lire les datas ecrites dans l'exe.

Si quelqu'un peux me donner un coup de main pour améliorer mon code, surtout le premier ce serait sympa 8).

J'ai pas encore tout compris dans les data.b et data.l.
J'ai mis data.b au hasard ai-je bien fait ???

1/ Creer un txt nommé "essais.conf" à la racine du c:\.
Le remplir de ce que l'on veut.

2/ Compiler ce code à la racine du c:\ OBLIGATOIREMENT en "InclureFichierTxt.exe".

Code : Tout sélectionner

Procedure.s InclureFichierTxt(Fichier$, LongueurFichier)
  
  ; Initialisation de la recherche de la zone qui contient les paramètres du programme
 Texte.s = "Texte de détection "
 Texte2.s = "de la DataSection"
 Texte = Texte + Texte2 ; j'ai coupé le texte en 2 car si je l'écrit d'un seul bloc, la recherche va confondre ce texte avec celui de la DataSection
 Mem = AllocateMemory(36)
 ExeName.s = Space(255)
 GetModuleFileName_(0, @ExeName, 255)
 Param.s = ProgramParameter()

 Select Param

  Case "#Ecriture"

   Param.s = ProgramParameter()  ; on enregistre les parametres

   Repeat
   
    Txt.s = ProgramParameter()

    If Txt
     Param = Param + " " + Txt
    EndIf

   Until Txt = ""
  
   Programme.s = Trim(StringField(Param, 1, "|"))
   Parametres.s = Trim(StringField(Param, 2, "|"))
   Parametres = Left(LSet(Parametres, LongueurFichier, " "), LongueurFichier) ; on ajuste le texte pour qu'il fasse une longueur de #ParamLenght
  
   Repeat
    Delay(100) ; On renomme le fichier jusqu'a ce que l'opération soit effectuée (permet d'attendre la fin de l'execution du programme)
   Until RenameFile(Programme, Programme + ".bak")
     
   If OpenFile(0, Programme + ".bak") ; On ouvre le fichier
            
    Pos = 0
    Caractere.s = " "
      
    Repeat ; Recherche de la zone qui contient les paramètres
 
     ReadData(0, @Caractere, 1)
 
     If Caractere = "T" ; si le caractère lu est un "T", on teste d'abord sur la première lettre du texte pour une question de rapidité
      
      FileSeek(0,Loc(0) - 1) ; on remonte dans le fichier pour tester sur le texte complet
      ReadData(0,Mem, 36) ; on lit le texte du fichier
       
      If CompareMemory(@Texte, Mem, 36) ; on compare le Texte avec ce qu'on lit dans le fichier
       Pos = Loc(0)
      EndIf
      
      FileSeek(0,Loc(0) - 35) ; on revient à la position initial du fichier, avant le test sur le texte complet pour continuer
      
     EndIf
 
    Until Eof(0) Or Pos 
   
    FileSeek(0,Pos)
    WriteData(0,@Parametres, LongueurFichier) ; on ecrit les paramètres du programme
    CloseFile(0)
   
   EndIf
  
   RenameFile(Programme + ".bak", Left(Programme, Len(Programme))) ; on remet le nom d'origine de l'exe
   RunProgram(Programme, "#Supprime", "") ; on supprime l'exe temporaire
   End

  Case "#Supprime"

   Temps = GetTickCount_()
 
   Repeat
    Delay(100) ; On supprime le fichier jusqu'a ce que la suppression soit bien effectué pendant au maximum 3 secondes
   Until DeleteFile("Temp.exe") Or GetTickCount_() - Temps > 3000
   
   End
   
 EndSelect

 CopyFile(ExeName, "Temp.tmp") ; on copie l'exécutable
 
 If OpenFile(0, "Temp.tmp") ; on ouvre le fichier
    
  Pos = 0
  Caractere.s = " "
      
  Repeat ; Recherche de la zone qui contient les paramètres
 
   ReadData(0, @Caractere, 1)
 
   If Caractere = "T" ; si le caractère lu est un "T", on teste d'abord sur la première lettre du texte pour une question de rapidité
      
    FileSeek(0, Loc(0) - 1) ; on remonte dans le fichier pour tester sur le texte complet
    ReadData(0, Mem, 36) ; on lit le texte du fichier
      
    If CompareMemory(@Texte, Mem, 36) ; on compare le Texte avec ce qu'on lit dans le fichier
     Pos = Loc(0)
    EndIf
      
    FileSeek(0, Loc(0) - 35) ; on revient à la position initial du fichier, avant le test sur le texte complet pour continuer
      
   EndIf
 
  Until Eof(0) Or Pos 
   
  FileSeek(0,Pos)
  Texte.s = Space(LongueurFichier)
  ReadData(0,@Texte, LongueurFichier)
  CloseFile(0)
  DeleteFile("Temp.tmp")
      
 Else
 
  MessageRequester("Erreur", "Impossible de lire les paramètres du programme", 0)
  End
 
 EndIf
  
 If FileSize(Fichier$) <> - 1
  
  Texte = ""
  OpenFile(20, Fichier$)
   
  Repeat
   Texte + Chr(ReadCharacter(20))
  Until Eof(20) <> 0
 
  CloseFile(20)
 
 Else
 
  MessageRequester("Incrusteur de fichier en DATA","Le fichier " + Fichier$ + " n'éxiste pas.", 0)
  
 EndIf
  
 CopyFile(ExeName, "temp.exe") ; on copie l'exécutable
 RunProgram("Temp.exe", "#Ecriture " + ExeName + "|" + Texte, "") ; on lance la copie de l'exe avec en paramètre le nom de l'exe et ce l'on souhaite écrire dedans
 End ; on quitte le programme obligatoirement pour pouvoir enregistrer les parametres
  
 ;- Data qui permet d enregistrer les parametres
 
 DataSection
 
  Data.b 84,101,120,116,101,32,100,101,32,100,-23,116,101,99,116,105,111,110,32,100,101,32,108,97,32,68,97,116,97,83,101,99,116,105,111,110,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
  Data.b 32,32,32,32,32,32,32,32,32,32,32,32,32,70,105,110,32,100,101,32,108,97,32,68,97,116,97,83,101,99,116,105,111,110
 
 EndDataSection

EndProcedure

InclureFichierTxt("c:\essais.conf", 3055) ; 3055 = nombre d'espace entre les deux balises début et fin
3/ Utiliser celui-ci pour lire l'exe (Pas obligé de compiler)

Code : Tout sélectionner

Procedure.s LectureFichierInclus(Fichier$)
  
 If FileSize(Fichier$) = - 1
  MessageRequester("Lecteur de DATA interne","Le fichier " + Fichier$ + " n'éxiste pas.", 0)
  End
 EndIf
 
 If OpenFile(0, Fichier$) ; on ouvre le fichier
 
  Caractere.s = Space(1)
  Texte.s = ""
  
  Repeat 
   
   ReadData(0, @Caractere, 1)
   Texte + PeekS(@Caractere, 1)
  
  Until Eof(0) <> 0 
  
  CloseFile(0)
  
  ; Recherche de la zone de DATA
  
  DebutZoneData = FindString(Texte, "Texte de détection de la DataSection", 1) + 36
  FinZoneData = FindString(Texte, "Fin de la DataSection", DebutZoneData) - 22
  LesDatas.s = Mid(Texte, DebutZoneData, FinZoneData - DebutZoneData)
  
  ; Saut du premier "Texte de détection de la DataSection" pour etre sur d'etre dans la fourchette des espaces
  If FindString(LesDatas, "Texte de détection de la DataSection", 1) <> 0
   DebutZoneData = FindString(LesDatas, "Texte de détection de la DataSection", 1)
   LesDatas.s = Mid(LesDatas.s, DebutZoneData + 36 , FinZoneData - DebutZoneData)
  EndIf
  
 EndIf

 ProcedureReturn LesDatas
   
EndProcedure

DonneesIncluses.s = LectureFichierInclus("c:\InclureFichierTxt.exe") 
MessageRequester("", DonneesIncluses, 0)
4/ Lancer l'executable "InclureFichierTxt.exe" que l'on viens de créer a la racine du c:\ .
Il ne se passe rien c'est normal.

5/ Puis lancer le 2e code pour lire l'intérieur de l'exe qui doit contenir le texte que vous aurez mis dans "essais.conf"

Voila, j'attend vos remarques et aide
Merci.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Coucou .....

Y'a personne pour me donner un coup de main :(

Pour optimiser un peu le code si c'est possible.

Et aussi a propos des DATAS, j'ai pas compris si il faut mettre .b ou .l.

Je sais que "data.b" c'est en byte et "data.l" c'est en ascii, mais à part ça, j'ai pas compris du tout la difference et surtout dans quel cas on utilise l'un ou l'autre.

Bon, dans ce code on lit de l'ASCII:

Code : Tout sélectionner

For i = 1 To 36
 Read Caractere
 Ligne$ + Chr(Caractere)
Next

Debug Ligne$
End

DataSection 
 Data.l 84,101,120,116,101,32,100,101,32,100,-23,116,101,99,116,105,111,110,32,100,101,32,108,97,32,68,97,116,97,83,101,99,116,105,111,110 
EndDataSection 


Dans celui-ci on lit des strings

Code : Tout sélectionner

Caractere.s

For i = 1 To 36
 Read Caractere
 Ligne$ + Caractere
Next

Debug Ligne$
End

DataSection 
 Data.s "T","e","x","t","e"," ","d","e"," ","d","é","t","e","c","t","i","o","n"," ","d","e"," ","l","a"," ","D","a","t","a","S","e","c","t","i","o","n"
EndDataSection 
Jusque là, j'ai à peut pres compris, mais la ou est l'os hélas, c'est que je comprend pas sous quelle forme doivent etre les DATAS lorsque c'est en byte. 8O

Peut on lire ses propres DATAS quand elles sont sous le format data.b ou bien ce doit etre obligatoirement un autre prg compilé que l'on peut lire, en faisant open et ReadData.

Code : Tout sélectionner

For i = 1 To ?
 Read Caractere
 Ligne$ + Chr(Caractere)
Next

Debug Ligne$
End

DataSection 
 Data.b ?,?,?,?,? etc ..... 
EndDataSection 
  
C'est pas clair du tout dans ma tete, (si y'avait que ça d'ailleurs, ce serait pas grave..... :oops: )

Merci de votre aide
Bonne soirée
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

...
Dernière modification par Backup le mar. 19/août/2014 14:35, modifié 1 fois.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonsoir DOBRO

Tout d'abord merci de ta longue réponse. 8)
Tu ne dort jamais, ne mange jamais etc ....car toi et quelques uns etes toujours à l'écoute des paumés comme moi :oops:

Je comprend un peu mieux les DATAS que je n'ai jamais utilisé meme en QB45.

Mais je n'ose relancer ton courou.... :oops:

Si je remplace les data.l en data.b, j'obtiens ça dans le message du debogueur 8O

Code : Tout sélectionner

debut : 
CallDebugger 

For i = 1 To 10 
 Read Caractere 
 Debug Caractere 

 If Caractere = 0 
  Goto suite 
 EndIf 
 
Next i 

suite: 
Restore deuxiemme 

For i = 1 To 5 
 Read Caractere$ 
 Debug Caractere$ 

 If Caractere$ = "?" 
  Restore premier: 
  Goto debut 
 EndIf 
 
Next i 

End 

DataSection 
premier: 
Data.b 84,101,120,116,101,32,100,101,32,100,-23,116 
Data.b 84,101,120,116,0 

deuxiemme: 
Data.s "salut" , "comment" , "vas" , "tu" , "?" 

EndDataSection 
1954047316
1701060709
1961452576
1954047316
1818325760
1660974197
1701670255
1979741294
1946186593
4128885
salut
comment
vas
tu
?
ça correspond à quoi ces grand nombres ???

Et surtout dans mon grand code au dessus, comme je ne sais pas ce que je vais insérer plus tard à la place des "32" dois-je mettre data.b ou data.l.
Si j'ai bien compris ce devrait etre Data.l car on peut dépasser -127 +127.

C'est ça hein, j'ai compris, ou je vais prendre ma baffe de 0.1h31 du mat :lol:

Encore merci de ta patience :oops:
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

avec :

Code : Tout sélectionner

 Debug Caractere & $ff
ou

Code : Tout sélectionner

 Read Caractere.b
sinon c'est un long
:wink:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@Dobro

Oh lala je crois que vais avoir mal derriere la tete.
La baffe est de rigueur.

Je viens de relire ton POST pour la 6e fois.
Et je viens de comprendre que j'ai encore dit une con.....

Comme c'est du texte, j'ai peut de chance de dépasser + 127 puisque le z minuscule est 122.

Donc un byte devrais suffire..... :roll:
Dis moi que j'ai raison, s'il te plait, dis moi que j'ai raison :D

@Flaith bonsoir

Merci de soulager un peu la lourde tache qu'a DOBRO de me relever du sous sol de la prog :oops:
Pourquoi c'est mieux avec "& $ff", tu sais je comprend vite, mais faut m'expliquer tres tres tres longtemps :lol:
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

hello,

dans l'aide (Variables, Types et Opérateurs), sur les types non-signés, il est noté :
Types non-signés: mis à part le type caractère (.c) (qui est un 'byte' non-signé en mode ascii, et un 'word' non-signé en mode unicode), PureBasic ne supporte pas nativement les types non-signés. Néanmoins, il est possible d'utiliser l'astuce suivante pour émuler un type non-signé:
a.b = 192
Debug a & 255 ; affichera 192
:wink:
Répondre