Posté le 09/12/2013 13:45
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 136 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
Citer : Posté le 11/04/2014 18:24 | #
code::Blocks me met un warnings
sur la ligne ecrit[0]=600&65280;
et il n'écrit rien dans la fichier
Citer : Posté le 11/04/2014 19:02 | #
Oui, 65280 utilise le bit de poids fort.
Fais-moi le plaisir de passer en unsigned tous ces shorts.
Citer : Posté le 12/04/2014 09:56 | #
toujours le meme probleme, voici le code
ecrit[0]=600&65280;
ecrit[1]=600&255;
fprintf(ecriture,"%s",ecrit);
Citer : Posté le 12/04/2014 10:02 | #
Suis-je bête
Parce que du coup, ecrit[0] valait 0, ce qui arrêtait l'écriture !
Citer : Posté le 12/04/2014 10:23 | #
mais je suis obligé de faire
fputc(ecrit[1],ecriture);
car fprintf n'écrit pas quand ecrit[0]=0x00 donc fprintf ne marche pas quand la valeur a mettre en hexadecimal en dessous de 256
Citer : Posté le 12/04/2014 10:41 | #
Dans ce cas...
{
int i;
for(i=0;i<l;i++) fpuct(*(s+i),file);
}
Je te laisse jeter un oeil à tout ça, je m'en vais jusqu'à demain soir.
Bon WE.
Citer : Posté le 12/04/2014 10:50 | #
dans le sdk casio, quand je lis le fichier je fais
{
Bfile_ReadFile(recuphandle, &(stockage[0+monstre*15]), 2, curseur);
curseur+=2;
Bfile_ReadFile(recuphandle, &(stockage[1+monstre*15]), 30, curseur);
curseur+=30;
Bfile_ReadFile(recuphandle, &(stockage[12+monstre*15]), 2, curseur);
curseur+=2;
Bfile_ReadFile(recuphandle, &(stockage[13+monstre*15]), 2, curseur);
curseur+=2;
Bfile_ReadFile(recuphandle, &(stockage[14+monstre*15]), 1, curseur);
curseur+=1;
monstre++;
ML_rectangle(12, 20, monstre + 11, 30, 1, ML_BLACK, ML_BLACK); // pour la barre de progression
ML_display_vram();
}
mais les (stockage[12+monstre*15]),(stockage[13+monstre*15]) et (stockage[14+monstre*15]) n'ont pas les bonnes valeurs
Ajouté le 13/04/2014 à 18:45 :
j'ai trouvé il faut déplacer les bits des valeurs int de 16bits (en faisant >>16)
stockage[0+monstre*15]=stockage[0+monstre*15]>>16;
curseur+=2;
Bfile_ReadFile(recuphandle, &(stockage[1+monstre*15]), 30, curseur);
curseur+=30;
Bfile_ReadFile(recuphandle, &(stockage[12+monstre*15]), 2, curseur);
stockage[12+monstre*15]=stockage[12+monstre*15]>>16;
curseur+=2;
Bfile_ReadFile(recuphandle, &(stockage[13+monstre*15]), 2, curseur);
stockage[13+monstre*15]=stockage[13+monstre*15]>>16;
curseur+=2;
Bfile_ReadFile(recuphandle, &(stockage[14+monstre*15]), 1, curseur);
stockage[14+monstre*15]=stockage[14+monstre*15]>>16;
curseur+=1;
mais ça marche que jusqua monstre=9. Si monstre>9, ça bug
Citer : Posté le 13/04/2014 20:04 | #
Alors, au passage, &(tableau[x]), tu peux le remplacer par tableau+x, c'est bien plus lisible.
Le curseur, je ne vois pas pourquoi tu t'embêtes avec, puisque il suit automatiquement. Lorsque que tu lis 2 octets, si tu utilises une deuxième instruction de lecture après, il lira la suite. Pour ça, tu mets -1 en dernier argument.
stockage est un tableau, mais de quoi ?
Citer : Posté le 13/04/2014 20:10 | #
Stockage est un tableau de int
Citer : Posté le 13/04/2014 21:07 | #
Je te conseille de prendre un tableau d'unsigned char, c'est plus facile pour mettre les octets un par un.
De plus, tu peux mettre
Bfile_ReadFile(handle,tableau+2,2,-1); // DEF
Bfile_ReadFile(handle,tableau+4,30,-1); // NOM
Bfile_ReadFile(handle,tableau+34,1,-1); // NIV
par exemple.
Citer : Posté le 14/04/2014 09:59 | #
Mais pour lire comment je ferais?
Citer : Posté le 14/04/2014 11:18 | #
Pour afficher les données dans l'exemple ci-dessus:
int i;
ptr = (short *)(tableau);
atk = *ptr;
ptr = (short *)(tableau+2);
def = *ptr;
ptr = (char *)(tableau+4);
for(i=0;i<30;i++) nom[i] = *(ptr+i);
ptr = (unsigned char *)(tableau+34);
niv = *ptr;
Du coup ça te prend deux instructions par donnée, mais ce n'est pas cher payé.
De plus, le problème de tes int c'est qu'ils prenaient 4 octets chacun alors que certaines données en faisaient 2 voire 1.
Citer : Posté le 14/04/2014 18:34 | #
j'ai trouvé ce qui allait pas, il y a des 0x0D qui se sont mis je sais pas comment dans le fichier en hexadecimal, ce qui bugué la lecture
Citer : Posté le 14/04/2014 18:41 | #
0x0D = Carriage return = fin de ligne.
Citer : Posté le 15/04/2014 16:15 | #
je me demande ou ces 0x0D on bien pu se mettre, dans le code c'est pas prévu
{
int i;
for(i=0;i<l;i++) fputc(s[i],file);
}
int char2int(unsigned char arg[])
{
int i = 0;
int charconverti = 0;
while(arg[i ])
{
charconverti = charconverti * 10 + (arg[i ] - '0');
i++;
}
return charconverti;
}
int main()
{
FILE* fichier=NULL,*ecriture=NULL;
unsigned char recup[40]={0};
int Maxmonstre=0,curseur=0,curseur2=0,caractere=0,mode=0,monstre=0;
unsigned char ecrit[20]={0};
printf("YuGiOh csv File Hex Converter \n\n");
printf("Combien de monstres y a t-il? ");
scanf("%d",&Maxmonstre);
fichier=fopen("monstres.csv","r"); //on ouvre le fichier
ecriture=fopen("codehexa.chf","w+");
if(fichier!=NULL){
printf("monstres.csv avec succes\n");
if(ecriture!=NULL){
printf("codehexa.csv avec succes\n");
rewind(fichier); //on met le curseur à 0
do{
do{
caractere=fgetc(fichier);
while(caractere!=';'){
caractere=fgetc(fichier); //on lit le caractère
} //tant que ";" n'est pas lu
curseur2=ftell(fichier); // on prend la position du curseur
fseek(fichier,-(curseur2-curseur),SEEK_CUR); // on remet la curseur au début(au ";" précédent)
fgets(recup,curseur2-curseur,fichier); // on lit ce qu'il y a entre les deux ";"
fseek(fichier,curseur2+1,SEEK_SET); // on remet la curseur après le ";"
curseur=curseur2;
if(mode==0){
ecrit[0]=(monstre&65280)>>8;
ecrit[1]=(monstre&255);
writefile(ecrit,2,ecriture);
}
if(mode==1){
writefile(recup,30,ecriture);
}
if(mode==2){
ecrit[0]=(char2int(recup)&65280)>>8;
ecrit[1]=(char2int(recup)&255);
writefile(ecrit,2,ecriture);
}
if(mode==3){
ecrit[0]=(char2int(recup)&65280)>>8;
ecrit[1]=(char2int(recup)&255);
writefile(ecrit,2,ecriture);
}
if(mode==4){
fputc(char2int(recup),ecriture);
curseur+=3;
curseur2+=3;
}
printf("%s \n",recup); //on affiche la chaine
mode++;
memset(recup,0,40*sizeof(char));
}while(mode!=5);
monstre++;
mode=0;
}while(Maxmonstre!=monstre);
printf("\nConversion reussi. Appuyer sur 0 puis Enter ");
scanf("%d",&Maxmonstre);
fclose(ecriture); //on ferme le fichier
}
fclose(fichier); //on ferme le fichier
}
return 0;
}
Citer : Posté le 15/04/2014 16:33 | #
Il y a des \n dans le fichier csv d'origine.
Citer : Posté le 15/04/2014 16:37 | #
j'ai bien fait gaffe de les retirer en faisant curseur+3 quand je fini de lire la phrase
Ex:qxfe;azerxe;azxraere;xctryrtcg; \n
il ne lit normalement pas les 3 derniers caractères
Citer : Posté le 15/04/2014 16:44 | #
Eh, mais une fin de ligne c'est "0A 0D".
"\n" n'est qu'une séquence d'échappement.
Citer : Posté le 15/04/2014 16:46 | #
C'est parce que \n est considéré comme un seul caractère. Quand tu l'écris il en fait deux mais il est interprété comme un retour à la ligne.
Citer : Posté le 15/04/2014 16:47 | #
Sous Linux, "\n" = "0D".
Sous Windows, "\n" = "0A 0D".
D'où certains problèmes de compatibilité des fichiers textes.
Citer : Posté le 15/04/2014 16:53 | #
j'ai regardé, mon programme me mets des 0x0D que devant des 0x0A il y a un léger souci là,