1

bon, je repete ma question

j'ai toujours pas reussi a creer ce que je voulais, alors j'ai decidé de creer un editeur en C et de stocker les map dans des fichiers a part. Or si je sais creer un ficher texte et le remplir avec des strings, je ne sais pas du tout comment creer un fichier "autre" et le remplir avec une matrice, et encore moins comment recuperer ces matrices
aidez moi !
Unlimited!

2

3

bon:
tu fais fopen(le_nom_de_ton_fichier_sans_l_extension, "wb+");
Tu met tes données, pui tu fait:
fputc(0, fp);
fwrite("xxxx", 4, 1, fp) <- "xxxx" est l'extention de ton fichier, max 4 lettres
fputc(0, fp);
fputc(GEN_DATA_TAG, fp)
fclose(fp);

Bon, voilà le plus simple, avec des fopen, fread et tout et tout.
De mémoire ca doit etre ca, mais je suis pas sur à 100%.
Pour le GEN_DATA_TAG, c'est la valeur qui dit au TIOS que c'est un fichier de données brutes, je ne me souviens plus de sa valeur, cherche un peu.

4

mais quand tu dis
Tu met tes données, pui tu fait:

je peux mettre des matrices ? Et comment je les récupere apres ?
Unlimited!

5

...
Ok:
short matrice[50][20] = {...};
fwrite(matrice, 50*20*sizeof(short), fp) //pour ecrire
fread(matrice, 50*20*sizeof(short), fp) //pour lire

6

mais ya toujours des trucs que je comprends pas
voila ce qui est marqué dans la doc de tigcc:
FILE *fp = fopen ("example", "wb");
// store anything you want in the file here
fputc (0, fp);
fputs ("HSC", fp);
fputc (0, fp);
fputc (OTH_TAG, fp); fclose (fp);

je suppose que je dois remplacer GEN_DATA_TAG par OTH_TAG
ou je dois placer fwrite(matrice, 50*20*sizeof(short), fp) dans ce cas la? ca a son importance ou il suffit seulement que fwrite("extension", 4, 1, fp) soit a la fin ? d'ailleur, c'est fwrite ou fputc ?
derniere question: fwrite doit prendre 4 arguments, or il y en a que 3 dans fwrite(matrice, 50*20*sizeof(short), fp) et apparement, pour l'argument manquant, c'est une histoire de byte. fputc ne pourrais pas marcher ici ?

merci! smile
Unlimited!

7

darkein
: ou je dois placer fwrite(matrice, 50*20*sizeof(short), fp) dans ce cas la?

Là où il y a écrit // store anything you want in the file here.

Et d'ailleurs, tu ferais mieux d'utiliser vat.h que stdio.h. Regarde les sources de Backgammon (http://pub26.ezboard.com/ftichessteamhqfrm10.showMessage?topicID=65.topic) pour voir comment faire.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

8

c'est ca pour sauvegarder ?
if (keypress==KEY_ENTER) {
SYM_ENTRY *sym=SymFindPtr($(bgammsav),0);
HANDLE handle;
if (sym) {
if (sym->flags.bits.archived) {
if (!EM_moveSymFromExtMem($(bgammsav),HS_NULL)) break;
}
handle=HeapRealloc(sym->handle,47);
sym=SymFindPtr($(bgammsav),0);
} else {
HSym hsym=SymAdd($(bgammsav));
if (!*(unsigned long *)&hsym) break;
handle=HeapAlloc(47);
if (handle)
sym=DerefSym(hsym);
else
SymDel($(bgammsav));
}
if (!handle) break;
sym->handle=handle;
short *fptr=HeapDeref(handle);
*fptr=45;
memcpy(fptr+1,&board,26);
fptr[14]=firstturn;
fptr[15]=turn;
fptr[16]=die1;
fptr[17]=die2;
*(unsigned long *)(fptr+18)=__randseed; // hack to save random seed
memcpy(fptr+20,(char [7]){0,'B','G','A','M',0,OTH_TAG},7);
} br


parce que la, ca me parrait legerement plus compliqué que d'utiliser fopen et tout et tout. M'enfin il n'est peut etre pas si compliqué qu'il n'y parait...
Unlimited!

9

Oui, ça devient tres compliqué!
Mais tout en faisant quasi la meme chose que fopen(), ça va plus vite !
Habitant de la petite et paisible bourgade du Havre
"Développeur" de TI-Civilization.

10

alors, personne peux m'aider ?
Unlimited!

11

Bon. Utilise fopen & compagnie, c'est plus facile pr commencer.

12

mais je veux bien l'utiliser, mais comment ?
si il faut que j'utilise fwrite, je te rappelle que celui que tu m'a donné n'a que 3 argument et pas 4, et je ne sais pas du tout quoi mettre. Sinon, j'ai essayé avec fputc, Mais ca ne marche pas vraiment, le fichier crée fait 9 bytes, comme si il etait vide...
Unlimited!

13

FILE *fp = fopen ("example", "wb");
fwrite (pointeur sur ton info, taille d'une info, longueur de ton info, fp);
fputc (0, fp);
fputs ("HSC", fp);
fputc (0, fp);
fputc (OTH_TAG, fp);
fclose (fp);


en bleu la partie où tu initialise ton fichier (ici un fichier nommé "exemple" créé en mode binaire "wb") : fp == NULL si le fichier n'a pas été initailisé.
en fuchsia ce que tu veux écrire dans ton fichier : le pointeur je n'explique pas, la taille d'une info perso j'utilise sizeof(), longueur de ton info je n'explique pas non plus et fp ton fichier.
en rouge l'extension de ton fichier (ici de type "HSC") ; l'extension doit être de 1 à 4 caractères (autant que je me souvienne tu meux mettres des chiffres des lettres et même des symboles) et si tu en mais 0 ton fichier apparaitra avec l'ext. OTH.

bien sûr tu peux utiliser fputc et fputs tou comme fwrite.

ton fichier fait 9o? un fichier de type OTH fait 5o + (nombre de caractère de l'extension)
dans l'exemple 5o + ("HSC" soit 3) = 8 => tu as donc mis un fputc ou fputs ou fwrite qui écrit 1o quelque part grin

14

Et si t'arrive pas tu fais comme moi, tu fais autant d'essais que nécessaire pour comprendre comment ca marche.

15

je crois que j'ai reussi. J'ai pas vraiment eu le temps d'essayer, mais la taille de la matrice etait plus importante
en fait, j'ai utilisé
fwrite(back1, sizeof(SYM_ENTRY),7*11 ,fp);

au lieu de
fwrite(matrice, 50*20*sizeof(short), fp)

y reste plus qu'a voir si ca marche correctement ^^
en tout cas, merci de m'avoir aidé wink
Unlimited!

16

sizeof(SYM_ENTRY)?????
eek
je crois pas que tu ais vraiment compris... sad ... ou alors tu as une liste de SYM_ENTRY mais j'en doute!
imagine j'ai une liste de x élements qui sont des unsigned long, pour la stocker je vais faire fwrite(ma_liste, sizeof(unsigned long), x, fp) ; c'est pas plus compliqué!

je reprends le poste #4 comme exemple

short matrice[50][20] = {...}; // ta liste
fwrite(matrice, sizeof(short), 50*20, fp);

PS : deadbird>je n'en suis pas sûr mais ne faut-il pas mettre &matrice puisqu'on veut le pointeur ici?

17

en fait, ui, j'ai une liste de sym_entry... Mais maintenant, j'ai un probleme de lecture ! cry
ca a marché une fois, mais j'ai eu un adress error, et quand je l'enleve, ca plante pas. Quesqui ne va pas dans ca ?
FILE *fp = fopen ("mat1", "rb");
fread(back1, sizeof(SYM_ENTRY),7*11 ,fp); fclose (fp);
Unlimited!

18

comment déclares-tu back1?

19

comme ca:
SYM_STR back1[7][11];
Unlimited!

20

IroS :
PS : deadbird>je n'en suis pas sûr mais ne faut-il pas mettre &matrice puisqu'on veut le pointeur ici?

Non, matrice est un tableau donc déjà un pointeur smile
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

21

alors ?
Unlimited!

22

j'ai enfin reussi a mettre ma matrice dans un fichier a part, et a la lire surtout (c'est ca qu'allait pas...) Mais maintenant, j'aimerais mettre plusieurs matrice dans le meme fichier. Alors je met des fwrite d'affilé (pareil pour lire, avec fopen) mais la, ca marche pu !
Es ce que je doit utiliser fseek, ou quelque chose comme ca entre chaque fwrite a la lecture et/ou a l'ecriture ?
Unlimited!

23

en fait, si ca marche, mais aleatoirement, reste plus qu'a savoir d'ou ca viens. J'ai 2 programmes: 1 qui fait la carte, et 1 qui la lit.
Si j'envois l'un puis l'autre sur VTI, je ne verrais rien, par contre, si je les relances l'un apres l'autre directement sur VTI, ca marche...
Unlimited!

24

Maintenant j'en suis sur, l'enregistrement de la carte ne marche qu'a partir du 2eme essais. D'ou est ce que ca peut venir ?
Au fait, y a t'il moyen de modifier des données sans tout effacer? parce que je ne comprend pas w+ d'apres l'aide TIGCC:
Create a new file for update (reading and writing). If a file by that name already exists, it will be overwritten.

donc ca ouvre un fichier pour le mettre a jour, mais si ce fichier existe, il est effacé...je comprend pas
Unlimited!

25

"it wil be overwritten"

pour ça je te conseil vivement d'utiliser les fonction sym_

26

darkein
: j'ai enfin reussi a mettre ma matrice dans un fichier a part, et a la lire surtout (c'est ca qu'allait pas...) Mais maintenant, j'aimerais mettre plusieurs matrice dans le meme fichier. Alors je met des fwrite d'affilé (pareil pour lire, avec fopen) mais la, ca marche pu !

fopen(...,"a");
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

27

j'ai essayé avec fopen(...,"a"), la ca marche plus du tout...
Unlimited!