Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » lire un fichier texte avec Bfile de gint
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

lire un fichier texte avec Bfile de gint

Posté le 07/11/2020 15:33

bonjour, j'ai regardé la doc de Bfile (gint) mais il est marqué nulle part comment lire un fichier texte


Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 07/11/2020 22:14 | #


Pedrobzh a écrit :
justement si je te demande c'est car j'ai pas compris

Dans ce cas pose une question plus précise : « que veut dire cet argument » ou bien « comment je crée le buffer » par exemple.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

Citer : Posté le 07/11/2020 22:17 | #


voila
uint16_t * filename = u"\\\\ fls0 \\ stf.txt";
int STFile = BFile_Open(filename,BFile_ReadOnly);
char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);


Ajouté le 07/11/2020 à 22:20 :
après compilation ça ne marche pas
pierre@pc-deb-799:~/Documents/casiostf$ fxsdk build-fx

:: Making into build-fx

sh-elf-gcc -c src/main.c -o build-fx/src/main.c.o -mb -ffreestanding -nostdlib -fstrict-volatile-bitfields -Wall -Wextra -Wno-missing-field-initializers -Os -D FX9860G -m3 -I include -MMD -MT build-fx/src/main.c.o -MF build-fx/src/main.c.d -MP
src/main.c: In function 'STF_render':
src/main.c:28:23: warning: unused parameter 'text' [-Wunused-parameter]
   28 | void STF_render(char *text,int scroll){
      |                 ~~~~~~^~~~
src/main.c:28:32: warning: unused parameter 'scroll' [-Wunused-parameter]
   28 | void STF_render(char *text,int scroll){
      |                            ~~~~^~~~~~
src/main.c: In function 'main':
src/main.c:36:5: error: variable-sized object may not be initialized
   36 |     char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);
      |     ^~~~
src/main.c:36:57: warning: implicit declaration of function 'malloc' [-Wimplicit-function-declaration]
   36 |     char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);
      |                                                         ^~~~~~
src/main.c:4:1: note: 'malloc' is defined in header '<stdlib.h>'; did you forget to '#include <stdlib.h>'?
    3 | #include <gint/bfile.h>
  +++ |+#include <stdlib.h>
    4 |
src/main.c:36:57: warning: passing argument 2 of 'BFile_Read' makes pointer from integer without a cast [-Wint-conversion]
   36 |     char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);
      |                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                                         |
      |                                                         int
In file included from src/main.c:3:
/home/pierre/opt/sh-elf-2.32-9.2.0/lib/gcc/sh3eb-elf/9.2.0/include/gint/bfile.h:84:34: note: expected 'void *' but argument is of type 'int'
   84 | int BFile_Read(int handle, void *data, int size, int whence);
      |                            ~~~~~~^~~~
src/main.c:36:11: warning: unused variable 'text' [-Wunused-variable]
   36 |     char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)), BFile_Size(STFile),0);
      |           ^~~~
make: *** [Makefile:121 : build-fx/src/main.c.o] Erreur 1

pensés suicidaires
   90%
Kbd2 Hors ligne Membre Points: 269 Défis: 0 Message

Citer : Posté le 07/11/2020 22:22 | #


The 2nd argument of BFile_Read is incorrect, as the buffer will be inaccessible afterwards. You must give a pointer to a buffer you have allocated beforehand.

Additionally, BFile_Read does not return a pointer to a buffer, it returns an error code.
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

Citer : Posté le 07/11/2020 22:29 | #


je commence a m’embrouiller

vous pouvez me donner un exemple?
pensés suicidaires
   90%
Kbd2 Hors ligne Membre Points: 269 Défis: 0 Message

Citer : Posté le 07/11/2020 22:37 | #



int fileSize = 50;
const uint16_t *fileName = u"\\\\fls0\\file.txt";
char *buffer = malloc(fileSize);
int descriptor = BFile_Open(fileName, BFile_ReadOnly);
BFile_Read(descriptor, (void *)buffer, fileSize, 0);
BFile_Close(descriptor);

The file must be an even size.
Remember to free the buffer when you're done with it.
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 07/11/2020 22:52 | #


Il y a plusieurs choses problématiques avec cette ligne :

char* text[BFile_Size(STFile)] = BFile_Read(STFile, malloc(BFile_Size(STFile)),


1. Tu dois réserver de la mémoire pour que BFile_Read() puisse écrire les données du fichier dedans - jusque-là pas de souci. Mais tu mélanges deux méthodes : (a) créer un tableau local du type char text[10] et (b) allouer un tableau avec malloc() du style char *text = malloc(10). Un seul à la fois.

2. Tu ne peux pas créer des tableaux à taille variable comme dans int array[n]n est une variable. (Tu peux, mais ça s'appelle des VLA, et c'est une mauvaise idée pour un très grand nombre de raisons). Donc si tu prends la direction « tableau » faut que la taille soit connue à l'avance.

3. Si tu écris char *text[...] tu obtiens un tableau de char * (de pointeurs). Alors que pour stocker du texte il te faut un tableau de char. Si tu veux un moyen mnémotechnique, tu peux retenir que le tableau [] et le pointeur * sont très similaires, et donc si tu as un char text[] c'est très similaire à un char *text (que tu aurais obtenu avec malloc() par exemple).

4. Tu oublies de fermer le fichier et de free() la mémoire.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

Citer : Posté le 08/11/2020 08:06 | #


on fait comment pour avoir la taille du fichier? car ça doit être dynamique :/
pensés suicidaires
   90%
Kbd2 Hors ligne Membre Points: 269 Défis: 0 Message

Citer : Posté le 08/11/2020 08:09 | #


If you have the descriptor, calling BFile_Size(descriptor) should return the size of the file.
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

Citer : Posté le 08/11/2020 08:28 | #


ok merci...

Ajouté le 08/11/2020 à 08:31 :
par contre j'ai un petit problème, je transfère le programme sur le calculatrice mais il ne s'affiche pas dans le menu

pourtant le fichier est bien dans le mémoire de stockage

#include <gint/display.h>
#include <gint/keyboard.h>
#include <gint/bfile.h>
#include <gint/std/stdlib.h>

//casio STF (Simple Text Formated)
//2020 pedroBzh <pedronatorbzh@gmail.com>
//
//title a page
//bigc1 big ecriture
//1pbar (1 px bar)
//2pbar 2 px bar
//nmtxt normal text


void STF_render(char *text,int scroll){

}

int main(void)
{

    const uint16_t *fileName = u"\\\\fls0\\stf.txt";

    int STFile = BFile_Open(fileName, BFile_ReadOnly);
    int fileSize = BFile_Size(STFile);
    char *buffer = malloc(fileSize);
    BFile_Read(STFile, (void *)buffer, fileSize, 0);
    dclear(C_WHITE);
    dtext(1, 1, C_BLACK, buffer);
    dupdate();

    getkey();
    BFile_Close(STFile);
    free(buffer);
    return 1;
}


pierre@pc-deb-799:~/Documents/casiostf$ fxsdk build-fx

:: Making into build-fx

sh-elf-gcc -c src/main.c -o build-fx/src/main.c.o -mb -ffreestanding -nostdlib -fstrict-volatile-bitfields -Wall -Wextra -Wno-missing-field-initializers -Os -D FX9860G -m3 -I include -MMD -MT build-fx/src/main.c.o -MF build-fx/src/main.c.d -MP
src/main.c: In function 'STF_render':
src/main.c:29:23: warning: unused parameter 'text' [-Wunused-parameter]
   29 | void STF_render(char *text,int scroll){
      |                 ~~~~~~^~~~
src/main.c:29:32: warning: unused parameter 'scroll' [-Wunused-parameter]
   29 | void STF_render(char *text,int scroll){
      |                            ~~~~^~~~~~
sh-elf-gcc -o build-fx/casiostf.elf build-fx/src/main.c.o build-fx/assets/img/hi.png.o -mb -ffreestanding -nostdlib -fstrict-volatile-bitfields -Wall -Wextra -Wno-missing-field-initializers -Os -D FX9860G -m3 -I include  -T fx9860g.ld -lgint-fx  -lgint-fx -lgcc -Wl,-Map=build-fx/map
sh-elf-objcopy -O binary -R .bss -R .gint_bss build-fx/casiostf.elf build-fx/casiostf.bin
fxg1a build-fx/casiostf.bin -o casiostf.g1a -i "assets-fx/icon-fx.png" -n "casiostf" --internal="cstf"

pensés suicidaires
   90%
Kbd2 Hors ligne Membre Points: 269 Défis: 0 Message

Citer : Posté le 08/11/2020 08:34 | #


Can you upload your project.cfg?
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 08/11/2020 08:42 | #


Problème évident ici :

fxg1a (...) --internal="cstf"

Quand tu crées le projet il est écrit en toutes lettres que le nom interne du projet doit prendre la forme @ suivie de 1 à 7 majuscules sinon l'add-in ne s'affiche pas dans le menu. Modifie-le dans project.cfg.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

Citer : Posté le 08/11/2020 10:19 | #


c'est bon ca marche

ps: maintenant que j'ai le char *, c'est quoi le caractère qui signifie le retour a la ligne?
pensés suicidaires
   90%
Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 08/11/2020 10:21 | #


C'est l'entier 10, que tu peux aussi écrire '\n'.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

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 v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 265 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