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

Message par Kwai chang caine »

Bon admettons, si en plus ya des signé et pas signé, a part les cheques je savais encore meme pas que ça existait :lol:

Bref vu votre niveau à tous, je vais pas creuser plus pour le "& $ff" je vais dire que c'est mieux, et "pis c'est tout" (comme dirais le manager de laure manaudou dans les guignols)
Je sais, j'ai pas des références d'enfer :lol:

En tout cas, j'aimerais bien savoir si j'ai le droit a une 2e baffe de 1h56 avec mon histoire de texte ne dépassant pas 122 avec le z minuscule ou bien une faible lueur a enfin traversé le brouillard opaque de mon esprit. :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

oui tu as raison pour 122
effectivement les codes ascii vont de 0 a 255
sur les languages "évolué" :lol: un octet est normalement pas signé

cela veut dire qu'un octet va de 0 a 255

mais Fred a preférer utiliser les Octets signé
et les octets "PureBasic" vont de -127 a +127
(perso , je trouve ça pas pratique !)

et Flaith viens de te donner l'astuce pour remettre le pure Basic avec des Octets Normaux (de 0 a 255)

si tu prends n'importe qu'elle valeur entre -127 et +127
et que tu exécute un "And 255" (&255) ou (&$FF), ça te sort une valeur compris entre 0 et 255 , bref la valeur d'un octet, comme dans le temps :lol:

le "&255" permet de passer d'un mode a l'autre (signé ou pas signé :D)


les grand nombre que tu obtiens son lié a

Code : Tout sélectionner

 Read Caractere 
comme auparavant tu n'as pas déclaré ta variable "Caractere"
PureBasic la considère par défaut comme étant un Long !! :D

si au debut du listing tu avait ecris

Caractere.b=0

tu n'aurai pas eu de grand nombre !! :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je me leve, et je me bouscule, tu ne te reveille pas .....etc :lol: :lol:

Aujourd'hui, la premiere chose que je fais c'est venir voir si mon DOBRO préféré :D a eu le temps de répondre a une de mes innombrables intérogations :roll:
Et encore une fois, je suis comblé.
Un peu comme les matins de notre enfance, où on se levait les yeux plein de colle pour regarder ce que l'homme en rouge (qui devrait etre vert d'ailleurs, encore la faute aux amerloques :D ) m'avait mis sur mes chaussures.

Tu ne sera jamais ce que je suis content de voir que certains etres comme toi, prennent la peine d'aider ceux comme moi.

Ton explication est limpide, simple et détaillée.
Elle m'a aussi fait comprendre celle de FLAITH à propos du 255 à la fin et aussi pourquoi il m'avait mis d'ecrire READ caractere.b 8)
C'est vrai FLAITH surestime beaucoup trop mes capacités en pensant que je pourrais comprendre avec moins d'une ligne :lol:
Mais c'est gentil quand même et je lui en suis reconnaissant 8)
Tu aurais du etre prof avec ce don que tu as de donner de ta personne, encore une corde de plus à ton arc, pardon à ta dobro :D
A force de tout tes dons, ça va devenir une harpe. :lol: :lol:

Ce qui serait bien, peut etre que ça éxiste ?, c'est de réunir tous les TUTOS et certaines explications comme les tiennes (qui n'ont rien a envier à un TUTO) sur un seul site, un peu comme tu as réunis sur ton site les codes sources. 8) avec des chapitres DATA, VARIABLES, FICHIERS, etc ...
Un peu aussi comme les livres complet qui sont livré avec les languages et qui expliquent en profondeur et avec des mots simples chaque fonction et surtout des exemples courts de quelques lignes.
Y'a rien de tel qui m'énerve que l'on explique une fonction et que l'on fourre un exemple de 100 ligne derriere, ou on doit chercher la fonction dedans et quand on l'a trouvé ya 200 parametres derriere qu'on en comprend pas le 10e :x
Ce serait plus pratique que de les avoir en debut de rubrique débutant car à force, il faudra aller à la 10e page pour voir le dernier POST écris. :lol:
ou disséminé dans le forum, car le probléme c'est que parfois on passe à coté d'une explication quand on ne sais pas exactement quoi taper dans la recherche.
Ou peut etre, peut on créer une rubrique TUTO sur le forum avec un POST pour chaque fonction que tout le monde (qui s'y connais bien sur) aurait loisir de completer. :wink:
Car pour ma part, du temps ou j'achetais les livres de basic, j'en achetais de plusieurs auteurs, et de ce fait plusieures explications differentes de la meme chose peuvent faire tilt et se completer pour au final faire ce qu'une seule n'aurait pas pu réaliser.
J'ai compris parfois certaines choses en 2 lignes avec les mots qui me parlent à moi, ce que je n'avais pas compris en lisant 3 pages. :?

Enfin en bref, mille merci, j'ai compris, peut etre pas tout tout a 100%, mais une grande partie.

Le probleme quand on est autodidacte et que l'on a appris à la naissance des micro-ordinateurs (comme on les appellais au début), y'avait pas grand monde pour nous aider, et tu doit en savoir quelque chose :wink:
Alors j'ai appris dans le désordre, juste ce qui me servais, j'ai beaucoup programmé des bases de données simple en ASCII et toujours des utilitaires de gestion d'immeuble, de compte, de disques etc....

Alors ce qui peut etre surprenant c'est que je connaisse certaines choses "assez évoluées", puis qu'apres je ne sache meme pas ce que c'est qu'un byte. 8O

Par moment aussi je ne fait pas l'association entre une chose que j'ai apprise il y a 20 ans et une nouvelle, meme si elles se ressemble comme la similitude entre les variables et les datas.

En tout cas, je tiens à me répéter et je me répeterais encore surement des milliers de fois, je ne vous dérange jamais sur un coup de tete (meme si c'est l'impression que cela donne :wink: )
Je cherche dans le forum, je regarde si y'a pas de tutos, et meme je regarde chez les voisins allemand et anglais.
Meme si j'ai fait (comme presque tout le monde) 6 ans d'anglais et que je suis allé par obligation 1 an en allemagne pour "servir" mon pays, je suis toujours aussi nul en langues :oops:

Je vous respecte et vous admire tous trop pour oser vous faire perdre votre temps que je sais precieux tout comme le miens.

Donc voila, c'est un peu long comme discours, mais j'aime bien que l'on me comprenne et que l'on ai confiance en moi.
Avec l'age (bien que je ne soit pas si vieux d'apres certains) une chose pousse l'autre dans ma tete, je note tout, dans tout les sens, mais cela reste tres dur de tout comprendre.
De plus, je suis responsable et j'ai réalisé ou réalise encore beaucoup de choses quotidiennement qui sont a mille lieux de la prog (à mon grand regret d'ailleurs).
C'est bien fait, j'aurais du travailler à l'ecole au debut, et devenir mon reve actuel, c'est à dire quelqu'un comme FLYPE par exemple.
Et peut etre cela m'aurait évité de travailler des tonnes d'heures pour gagner des "plosses"
Peut etre dans une autre vie :D

Encore mille mercis pour ta gentillesse et ta patience que je mettrais surement encore mainte fois à rude epreuve.
Merci aussi à FLAITH et tout ceux qui ont la gentillesse de m'aider.
Et bien sur a FRED sans qui je ne vous aurais pas connu.
Je me sent un peu moins seul grace à vous tous, et de ce fait, je ne pourrais jamais assez vous en etre reconnaissant.

Si l'on m'avais dit un jour que ce qui m'a isolé du monde (la prog, les pc, l'electronique, la sonorisation) me permettrais d'en cottoyer un autre grace a internet, j'aurais bossé encore plus la prog. :wink:
J'essaie donc, à présent que ma vie se calme un peu, de rattraper le temps perdu, mais il court "hachement" vite le bougre :lol:

Excelente journée à la famille pure
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Kwai chang caine a écrit : une corde de plus à ton arc, pardon à ta dobro :D
ps: pour info on dit UN Dobro :D

beaucoup se trompe et féminise ce mot, alors qu'il viens de l'anglais
(contraction de Dopiera BROther)
et qu'UN dobro n'est pas UNE guitare !!
on dit UN banjo , et UN Dobro (ce sont 2 instruments a résonateur :D )
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

je vais essayer de m'en souvenir (Encore un truc a retenir :lol:)

Et pour l'histoire des tutos, elle est pourite mon idée, elle existe, ou elle est pas pourite ????? :D

Ce pourrais etre un site ou meme etre un PDF, CHM ou autre qui serais distribuable.... 8) ou bien un site et un PDF etc .... :D
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Message par flaith »

Dobro a écrit :
Kwai chang caine a écrit : une corde de plus à ton arc, pardon à ta dobro :D
ps: pour info on dit UN Dobro :D

beaucoup se trompe et féminise ce mot, alors qu'il viens de l'anglais
(contraction de Dopiera BROther)
et qu'UN dobro n'est pas UNE guitare !!
on dit UN banjo , et UN Dobro (ce sont 2 instruments a résonateur :D )
en serbo-croate, dobro veut dire "ça va" (quand on pose la question comment vas-tu) :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

flaith a écrit :
Dobro a écrit :
Kwai chang caine a écrit : une corde de plus à ton arc, pardon à ta dobro :D
ps: pour info on dit UN Dobro :D

beaucoup se trompe et féminise ce mot, alors qu'il viens de l'anglais
(contraction de Dopiera BROther)
et qu'UN dobro n'est pas UNE guitare !!
on dit UN banjo , et UN Dobro (ce sont 2 instruments a résonateur :D )
en serbo-croate, dobro veut dire "ça va" (quand on pose la question comment vas-tu) :D
en fait les Createurs John et ED dopyera sont Tchecque ! et en Tcheque Dobro veut dire "Bon" ,"Bien" !
:D
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Je n'ai pas lu tous les post de ce dialogue mais je vous propose un petit soft


VERSION DEBUGGEE !

Code : Tout sélectionner

DataSection

DataDeb:

Data.s "$0123456789$"
Data.s "                                                                                                    "
Data.s "                                                                                                    "
Data.s "                                                                                                    "
Data.s "                                                                                                    "
Data.s "                                                                                                    "
DataFin:

EndDataSection

CreateFile(0,"c:\copie.bat")
WriteStringN(0,"@echo off")
WriteStringN(0,"copy c:\automodif.$$$ c:\automodif.exe")
WriteStringN(0,"del c:\automodif.$$$") ;<<<<<<<<<< Correction !!!
WriteStringN(0,"del c:\copie.bat")
CloseFile(0)
CopyFile("c:\automodif.exe","c:\automodif.$$$")
OpenFile(0,"c:\automodif.$$$")
*Prog = AllocateMemory(16000)
ReadData(0, *Prog, Lof(0))
For n=1 To 2
Repeat
  Pos+1
Until PeekS(*Prog+Pos,12)="$0123456789$" 
Pos+1
Next
Restore DataDeb
Read texte.s
Read texte.s
Text.s = InputRequester("Inserrer Nouveau texte","Text à mettre en place",Trim(texte) )
FileSeek(0,Pos+12)
WriteString(0,Text)
CloseFile(0)
RunProgram("c:\copie.bat","","c:\",#PB_Program_Hide)
End
Il faut le compiler en "c:\automodif.exe" ou alors changer les valeurs dans le code !
Dernière modification par brossden le lun. 16/avr./2007 13:39, modifié 2 fois.
Denis

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

Message par Kwai chang caine »

Bonjour BROSSDEN

Mais dis donc il est bien ce petit code la!!! 8)

Je viens de l'essayer, j'ai juste vu au prime abord qu'il laisse un fichier "automodif.$$$" apres la modif.
Comme je l'ai effacé et qu'apparement la nouvelle phrase reste dans l'exe, je suppose qu'un simple deletefile devrait suffir avant la fin du code.

J'aurais une question à te poser:

Est on limité par la grandeur du texte a entrer ???
Est-ce que l'on peut y inserer des chr(13) , c'est à dire un copier coller d'un fichier TXT complet ?

Je vais me pencher sur ton code pour essayer de comprendre comment tu as fait.
En attendant merci de ton aide :D
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour Kwai chang caine

Pour répondre à tes questions :

1 - Le fichier "automodif.$$$" c'est un bug j'ai omis la commande pour l'éffacer dans le fichier "copie.bat" je vais le corriger de ce pas !

2 - La taille du texte ou autre data est modifiable en copiant autnt de fois que necessaire les lignes Data" ... " qui contiennent 100 espaces. Mon exemple conteint 5 lignes de 100 espace donc capacité 500 octets. il te suffit de rajouter 10 lignes identiques pour augmanter la taille de 1000 octets.

3 - Dans cette espace plus ou moins grand tu peux stocker n'importe quel caractère ascii de $0 à $FF (0 à 255). il faut savoir qu'un vériable retour chariot c'est :
- le caractère $0D suivit de $0A >>>> Chr(13)+Chr(10)

J'espère avoir répondu à tes questions mais n'hésite pas si tu en as d'autres !


Pour ce qui est du principe :

a) Je copie l'executable en $$$ sit ici Automodif.exe en Automodif.$$$ dans lequel il y a la chaine "$0123456789$" qui me sert de repere, suivit (ici) des 500 octets à blancs qui représentent l'espace disponible.

b) Je modifie le fichier à partir de ce repere "$0123456789$". Ici j'ai utilisé Inputrequester()

c) Je crée un fichier batch (copie.bat) qui peut en faite être assimilé à une macro DOS qui copie le fichier Automodif.$$$ en Automodif.exe puis détruit le fichier Automodif.$$$ avant de se détruire lui-même (c'est bien pratique le Dos !!).
Dernière modification par brossden le lun. 16/avr./2007 13:14, modifié 1 fois.
Denis

Bonne Jounée à tous
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 de ta réponse.
Par contre c'est un truc de fous, maintenant je suis au boulot et j'ai les 2 fichiers qui restent "automodif.$$$"" et "copie.bat" 8O

Chez moi hier, y'avait que "automodif.$$$" qui restait.
J'avais rajouté aussi la ligne dans le fichier "copie.bat" mais ça n'avait pas marché. :?

Est ce que cela peu venir de la machine, ou bien de la rapidité de l'execution du ".bat" ???? Peut on le temporiser ???
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

apres analyse de ton listing
et ayant encore quelques difficulté a bien saisir, ce qui ce passe :lol:

je trouve que ceci (qui est le coeur du prncipe utilisé)

Code : Tout sélectionner

OpenFile(0,"c:\automodif.$$$")
*Prog = AllocateMemory(16000)
ReadData(0, *Prog, Lof(0))
For n=1 To 2
    Repeat
        pos+1
    Until PeekS(*Prog+pos,12)="$0123456789$"
    pos+1
Next n
Restore DataDeb
Read texte.s
Read texte.s
text.s = InputRequester("Inserrer Nouveau texte","Text à mettre en place",Trim(texte) )
FileSeek(0,pos+12)
WriteString(0,text)
CloseFile(0)
c'est tres tres fort ! :D
en fait je suis sur le cul ! :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Que veux tu dire mon cher DOBRO ????
A en voir tes quenottes en pleine action, je pourrais croire que ce code ne peux pas marcher ???
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

retournez sur mon post précedent je l'ai complété !
en espérant que Dobro ne se soit ps trop bléssé en tombant sur le cul ! :lol:
Denis

Bonne Jounée à tous
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Voilà le code plus ou moins bien commenté !:


VERSION DEBBUGEE

Code : Tout sélectionner



DataSection

DataDeb: ; Adresse du debut de la zone des datas
Data.s "$0123456789$"  ; Ici place un repère du debut de la zone modifiable sans risque 
Data.s "                                                                                                    " ; 100 caractères $20
Data.s "                                                                                                    "
Data.s "                                                                                                    "
Data.s "                                                                                                    "
Data.s "                                                                                                    "
DataFin: ; Adresse de fin de la zone des datas

EndDataSection
; Création du fichier batch ayant pour utilité de copier le fichier .$$$ en .exe, puis de detruire le .$$$ et s'autodétruire.
CreateFile(0,"c:\copie.bat")
WriteStringN(0,"@echo off")
WriteStringN(0,"copy c:\automodif.$$$ c:\automodif.exe")
WriteStringN(0,"del c:\automodif.$$$") ;<<<<<<<<<< Correction !!!
WriteStringN(0,"del c:\copie.bat")

CloseFile(0)
CopyFile("c:\automodif.exe","c:\automodif.$$$")

; Recherche de la Position du repère dans le fichier .$$$

OpenFile(0,"c:\automodif.$$$")
*Prog = AllocateMemory(16000)
ReadData(0, *Prog, Lof(0))
For n=1 To 2 ; <<<<<<<<<<<<<<<<<<<<< deux fois parce que la première fois fais partie du code lui-même ( trois lignes plus bas )
  Repeat
    Pos+1
  Until PeekS(*Prog+Pos,12)="$0123456789$"
  Pos+1
Next
Restore DataDeb
Read texte.s
Read texte.s

; Saisie de la modif
Text.s = InputRequester("Inserrer Nouveau texte","Text à mettre en place",Trim(texte) )

; Postionnement dans le fichier .$$$ 

FileSeek(0,Pos+12)

; Ecriture de la modif 
WriteString(0,Text)
CloseFile(0)

; Lancement du fichier Batch !
RunProgram("c:\copie.bat","","c:\",#PB_Program_Hide)
End 

; Le tour est joué !
Dernière modification par brossden le lun. 16/avr./2007 13:39, modifié 2 fois.
Denis

Bonne Jounée à tous
Répondre