Fichier TXT en data binaire ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
PhM
Messages : 118
Inscription : dim. 08/déc./2019 10:50

Fichier TXT en data binaire ?

Message par PhM »

Bonjour,

Pour inclure une image extérieure en binaire dans le programme cela est facile :

Code : Tout sélectionner

UsePNGImageDecoder()
If CatchImage(1, ?Img_Start1, ?Img_End1 - ?Img_Start1)  : EndIf

DataSection
  Img_Start1:
  IncludeBinary "PHM\parametre.png"
  Img_End1:
EndDataSection
MAIS, est-il possible de faire la même chose avec un fichier texte extérieur et, dans ce cas, quelle est la manière de l'appeler ?

Code : Tout sélectionner

Appel du fichier txt extérieur ?

DataSection
  TRADUC_debut:
  IncludeBinary "PHM\Traductions.txt"
  TRADUC_fin:
EndDataSection
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Fichier TXT en data binaire ?

Message par Micoute »

Avec ReadFile() ?
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Re: Fichier TXT en data binaire ?

Message par Marc56 »

ReadFile() est valable pour un chargement dynamique, donc solution valable si on veut par exemple utiliser plusieurs fichiers de langues.

Je crois que ce que souhaite PhM c'est d'incorporer le fichier dans l'EXE ?

Utiliser IncludeBinay est possible, mais cette commande va charger tout le fichier tel quel dans une zone mémoire. Il faudra ensuite utiliser des instructions comme PeekS() pour extraire les données texte et les replacer dans des variables. Faisable mais un peu long.

Une solution plus simple est d'utiliser IncludeFile et de formater le fichier de traduction comme s'il faisait partie du code source de la section DataSection. IncludeFile va donc faire comme un simple copier/coller au moment de compiler.

Exemple de fichier traduction.txt

Code : Tout sélectionner

Data.s "Hello", "Bonjour"
Data.s "World", "Monde"
Data.s "EOT", ""
Note le EOT: (End OF Text) que j'utilise pour arrêter ensuite la lecture. Comme ceci, on peut ajouter des lignes et lire ensuite avec Read sans s'occuper du nombre de ligne ni provoquer une IMA.

Ensuite, s'il s'agit de traduction, le mieux est d'utiliser une Map
Exemple (un peu verbeux)

Code : Tout sélectionner

NewMap Traductions$()

Repeat
    Read.s Tmp_Us$
    If Tmp_Us$ = "EOT" : Break : EndIf
    Read.s Tmp_Fr$
    AddMapElement(Traductions$(), Tmp_Us$) 
    Traductions$() = Tmp_Fr$ 
ForEver 

Debug "--- Lecture Map"
ForEach Traductions$()
    Debug MapKey(Traductions$()) + " = " +Traductions$()    
Next

End

DataSection
    Traductions:
    IncludeFile "PHM\Traductions.txt"
EndDataSection
Ce qui donne

Code : Tout sélectionner

--- Lecture Map
World = Monde
Hello = Bonjour
:wink:
Avatar de l’utilisateur
PhM
Messages : 118
Inscription : dim. 08/déc./2019 10:50

Re: Fichier TXT en data binaire ?

Message par PhM »

Merci pour vos réponses. Oui, je souhaitais bien incorporer le fichier texte dans le programme.

L'explication de Marc56 est claire mais ne donne pas les résultats espérés pour moi.
La cause vient du fait que j'ai 9 langues différentes, dont le polonais et le russe qui au retour de chargement ont des caractères complètements "chamboulés" !

ligne d'origine : A propos...;On propos...;Auf Vorschlag...;En la propuesta...;Su proposta...;Op voorstel...;Na propozycję...;По предложению...

ligne en retour : A propos...;On propos...;Auf Vorschlag...;En la propuesta...;Su proposta...;Op voorstel...;Na propozycję...;По предложению...

Je vais donc incorporer les lignes en data.s classique en espérant que les retours soient conformes aux originaux.
Marc56
Messages : 2148
Inscription : sam. 08/févr./2014 15:19

Re: Fichier TXT en data binaire ?

Message par Marc56 »

Les caractères illisibles, c'est juste une question d'encodage: Utilise un éditeur de texte qui sauvegarde en Utf-8
(ou tout simplement l'éditeur PB en vérifiant Fichier > Format de fichier > Utf-8)
qui est de toutes façons le format conseillé pour tout.

Avec 8 langues, tu ne peux utiliser une map. Utilise par exemple un tableau à deux dimensions.

:wink:
Avatar de l’utilisateur
Naheulf
Messages : 191
Inscription : dim. 10/mars/2013 22:22
Localisation : France

Re: Fichier TXT en data binaire ?

Message par Naheulf »

Marc56 a écrit :Avec 8 langues, tu ne peux utiliser une map. Utilise par exemple un tableau à deux dimensions.
Heuuu....
Si c'est pour avoir les traductions dans ton programme, une seule map est suffisante. Sauf cas très particulier, tu n'aura besoin de charger qu'une seule langue à la fois.
Répondre