Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Ouvrir des fichiers .txt dans C.Basic
Massena Hors ligne Rédacteur Points: 1888 Défis: 11 Message

Ouvrir des fichiers .txt dans C.Basic

Posté le 18/04/2021 16:08

Coucou,

C.Basic permet de lire des fichiers .txt et de les convertir directement en .g3m
J'aimerais savoir comment ouvrir et éditer des fichiers textes proprement sur PC pour après les transférer sur calculatrice.

En effet, actuellement le fichier semble être dans un encodage un peu particulier (les accents ne sont pas des accents, les slash sont doublés, etc.) sur PC tandis que sur calculatrice tout est parfait. Lorsque j'édite le fichier et le renvoie sur calto, C.Basic n'arrive pas à me reconvertir le fichier et à me formater le tout, et il pète un câble en ne sautant aucun espace, bref, c'est le ~bawazar~

KikooDX m'a mis sur la piste d'un éventuel encodage particulier à CASIO, quelqu'un a des pistes ?


Dark storm En ligne Labélisateur Points: 11528 Défis: 176 Message

Citer : Posté le 18/04/2021 16:16 | #


C'est encodé en fontcharacter cette histoire ? ?

Je sais plus où est la doc, mais Cake avait fait un bon boulot sur le sujet : https://forge.touhey.org/casio/fontcharacter.git
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 20623 Défis: 143 Message

Citer : Posté le 18/04/2021 16:29 | #


Est-ce que tu peux préciser les différences que tu observes ? Ça pourrait être FONTCHARACTER mais ça me paraît douteux.
Massena Hors ligne Rédacteur Points: 1888 Défis: 11 Message

Citer : Posté le 18/04/2021 20:31 | #


En considérant le code suivant :


Je l'ai transféré sur mon PC et mon éditeur de texte (micro) l'a interprété comme ça :

'ProgramMode:RUN
_ClrVram
_ClrScreen
1->A
A=1=>Text @1,1,"Petit haiku _#E601_ lire"
Text @30,1,"Dans la vieille mare //"
Text @48,1,"une grenouille saute//"
Text @66,1,"le bruit de l'eau"
_DispVram
Getkey1

Les slashs sont doublés et l'accent a été remplacé par _#E601_
J'ai ensuite rajouté la ligne de code suivante sur mon PC :

Text @94,1,"Sympa, n'est-ce pas ?"

Après le transfert, le fichier apparaît totalement désordonné :


Là j'ai remplacé automatiquement les ?? par un retour à la ligne et tout est redevenu normal :


De retour sur le PC, j'ai rajouté un "è_é" à la fin de la ligne de texte, ce qui donne ceci :

Text @94,1,"Sympa, n'est-ce pas ? è_é"

Et ça a rajouté à la place des caractères japonais :

Lephenixnoir Hors ligne Administrateur Points: 20623 Défis: 143 Message

Citer : Posté le 18/04/2021 21:24 | #


Hmm ça a vraiment l'air d'être un truc custom. J'ai regardé dans la version du manuel que j'ai traduite mais je n'ai pas trouvé de mention de ce système. Comment est-ce que tu as fait pour lire et écrire le fichier texte ?

Je suis pas super optimiste du coup c'est pas juste une histoire d'encodage.
Massena Hors ligne Rédacteur Points: 1888 Défis: 11 Message

Citer : Posté le 18/04/2021 22:45 | #


Pour convertir un .g3m en .txt il suffit d'appuyer sur [F6][F1](>txt) depuis l'écran principal de C.Basic.

Dans l'éditeur de C.Basic, les -> sont convertis en →, => en ⇒etc. lors de l'enregistrement.
Tituya Hors ligne Rédacteur Points: 1748 Défis: 16 Message

Citer : Posté le 19/04/2021 10:40 | #


J'ai fait quelques tests pour voir, les accents commencent à partir du caractère #E601. Voici la liste que j'ai pu faire :

#E600  blank
#E601  à
#E602  á
#E603  â
#E604  ã
#E605  ä
#E606  å
#E607  æ
#E608  ç
#E609  è
#E60A  é
#E60B  ê
#E60C  ë
#E60D  ì
#E60E  í
#E60F  î
#E610  ï
#E611  un symbole bizarre
#E612  ñ
#E613  ò
#E614  ó
#E615  ô
#E616  õ
#E617  ö
#E618  ø
#E619  ù
#E61A  ú
#E61B  û
#E61C  ý
#E61D  þ
#E61E  ß
#E61F  ÿ
#E620  un a avec une vague
#E621  ą
#E622  ć
#E623  un c accent circonflexe inversé
#E624  œ
#E625  un d avec une sorte de '
#E626  ę
#E627  e accent circonflexe inversé
#E628  un l barré
#E629  n accent aigu
#E62A  n accent circonflexe inversé
#E62B  o avec deux accents aigu
#E62C  r accent circonflexe inversé
#E62D  s accent aigu
#E62E  s accent circonflexe inversé
#E62F  un t'
#E630  u avec un rond au dessus
#E631  un u avec deux accents aigu
#E632  un z accent aigu
#E633  un z avec un point au dessus
#E634  un z accent circonflexe inversé
#E635  blank
#E636  blank


C'est tout pour les accents. Après on commence avec l'alphabet grec puis ce qui semble être du cyrillique et enfin les symboles de casio (les flèches, carrés etc).
En marquant directement les valeurs dans le fichier texte, le symbole est correctement associé. Cette liste peut donc servir pour transformer un texte automatiquement
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire l'inverse grâce à Bzh)



Lephenixnoir Hors ligne Administrateur Points: 20623 Défis: 143 Message

Citer : Posté le 19/04/2021 10:43 | #


C'est pareil que FONTCHARACTER sur cette section donc : https://bible.planet-casio.com/common/casio/sdk_manuals/Character%20Set.pdf

Ce que je ne comprends pas c'est pourquoi les fins de ligne (\r?) et d'où sortent les katakana.
Tituya Hors ligne Rédacteur Points: 1748 Défis: 16 Message

Citer : Posté le 20/04/2021 16:26 | #


J'ai pas plus de détail, mais de ce que j'ai vu, C.basic converti automatiquement certaines suites de caractères en symbole (
Genre pi) lors de la première lecture.
En plus de ça, les commentaires en basic sont indiqués par l'apostrophe. Et C.basic ne remplace pas les valeurs dans un commentaire... Je ne sais pas si on peut désactiver les ', donc en attendant j'ai préféré les supprimer.

Donc avec ça :

value = {'à':"#E601",'á':"#E602", 'â':"#E603", 'æ':"#E607", "ç":"#E608","è":"#E609",\
"é":"#E60A","ê":"#E60B","ë":"#E60C","î":"#E60F","ï":"#E610","ô":"#E615","ö":"#E617",\
"ø":"#E618","ù":"#E619","û":"#E61B","œ":"#E624"}

infile = open("fichier.txt","r")

for ligne in infile.readlines():
    for key in value.keys():
        ligne = ligne.replace(key,value.get(key)).replace("'"," ")
    print(ligne)
infile.close()

Ce n'est pas suffisant pour réussir à avoir un texte propre...

Donc j'ai bien peur que tu doives faire le texte à la main... (ou au moins corriger les erreurs )
Je vais tester plus de choses ce soir pour voir.

(oui j'ai vraiment envie de voir Heartache sortir )
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire l'inverse grâce à Bzh)



Massena Hors ligne Rédacteur Points: 1888 Défis: 11 Message

Citer : Posté le 20/04/2021 19:11 | #


Merci beaucoup !

Au pire BIDE marche toujours, tant pis
Je n'arrive juste pas à le lancer actuellement mais comme je change bientôt de distro je cherche pas à savoir pourquoi.
Tituya Hors ligne Rédacteur Points: 1748 Défis: 16 Message

Citer : Posté le 27/04/2021 00:41 | #


Ah oui au passage j'ai continué mes recherches sur ça.
Il semblerait que C.basic utilise la forme _#value_ dans les chaînes de caractère ou commentaire. Et utilise la forme sans "_" dans le reste des cas.

Ici vu que Masséna souhaite incruster les accents dans des chaînes de caractère, nous devons rajouter les underscores pour que ça fonctionne correctement. Seulement, dans son exemple, Masséna souhaite ajouter cette chaîne :

Text @94,1,"Sympa, n'est-ce pas ? è_é"

Qui donne un magnifique :

Text @94,1,"Sympa, n'est-ce pas ? _#E609___#E60A_"

Et ça, C.basic aime pas. Il y a une répétition d'underscore (qu'il doit utiliser comme un caractère spécial), ce qui amène à ne pas représenter le dernier accent. Pour ça, j'ai remarqué qu'en entourant l'underscore par deux underscores ( ), ça marchait correctement. Ce qui nous donne au final cette traduction :

Text @94,1,"Sympa, n'est-ce pas ? _#E609_____#E60A_"

Les fonctions C.basic (d'après Masséna) commencent toujours par un underscore suivi d'une majuscule.
Donc hop un petit coup de python et c'est bon

value = {'à':"#E601",'á':"#E602", 'â':"#E603", 'æ':"#E607", "ç":"#E608","è":"#E609",\
"é":"#E60A","ê":"#E60B","ë":"#E60C","î":"#E60F","ï":"#E610","ô":"#E615","ö":"#E617",\
"ø":"#E618","ù":"#E619","û":"#E61B","œ":"#E624"}

infile = open("in.txt","r")
outfile = open("out.txt","w")

for ligne in infile.readlines():
    i=0
    while i < len(ligne)-1:
        if ligne[i] == '_' and not ligne[i+1].isupper():
            ligne = (lambda string,place: string[:place] + "__" + string[place:])(ligne,i)
            i+=2
        i+=1
    ligne = ligne.replace('/',"//")
    for key in value.keys():
        ligne = ligne.replace(key,(f"_{value.get(key)}_"))
    outfile.write(ligne)

infile.close()
outfile.close()

Désolé si c'est moche, le python c'est pas mon fort

Ce qui nous donne au final :

'ProgramMode:RUN
_ClrVram
_ClrScreen
1->A
A=1=>Text @1,1,"Petit haiku _#E601_ lire"
Text @30,1,"Dans la vieille mare"
Text @48,1,"une grenouille saute//"
Text @66,1,"le bruit de l'eau//"
Text @94,1,"Sympa, n'est-ce pas ? _#E609_____#E60A_"
_DispVram
Getkey1

En testant, le fichier est correctement converti et peut être envoyé sans problème sur la calculatrice. Cependant j'ai remarqué plusieurs choses :

1- C.basic effectue les modifications sur les accents seulement dans les fichiers texte et non dans les fichiers g3m. Ainsi, un fichier .txt converti reste intact.
2- C.basic semble effectuer ces modifications lors de l'écriture du fichier. Ainsi, lors du transfert les caractères underscore (comme pour è_é) sont bien en place. Mais si vous modifiez le txt directement sur la calculatrice, lors de la prochaine écriture, C.basic va convertir cet underscore en un caractère vide.
En gros, vous ne pouvez pas modifier un txt sur calculatrice sans causer de problème sur vos underscores.
3- Pour éviter le oneline et les ??, garde un fichier .txt directement dans ta calculatrice et modifie-le directement dans la calculatrice depuis ton ordinateur. Je sais pas pourquoi mais ça évite ce problème

La version que je t'avais donné en MP est moins intéressante que celle là. Notamment pour les / et un bug pour les lignes avec une fonction commençant par un _ et possédant un autre underscore plus loin

Donc voilà qui devrait t'aider à finir Heartache plus vite
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire l'inverse grâce à Bzh)




LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 113 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd