
Solicito ayuda con un pequeño proyecto
Publicado por Juan Pablo (3 intervenciones) el 30/03/2014 05:38:23
Hola a todos! les mando este mensaje porque solicito ayuda con este pequeña porcion de un programa grande
lo que hace es llamar a las sucesivas funciones para traducir un texto que va de japones en español, para eso recibe como archivo txt el texto traducido, en fin el caso es que despues de cambiar la configuracion del txt por error( recuerdo que me aparecio un mensaje confirmando si realmente queria cambiarlo) cada vez que lo ejecuto los comandos que lee directamente los direcciona a unrecognised command, como que no puede leerlo.
Haciendo el debug correpondiente me encontre con que en el fgets
(fgets(buf, sizeof(buf), fp))
este me devolvia de retorno no el sizeof buf, sino un valor mucho mayor es como que el fgets es truncado por el \n, sino que antes no pasaba eso, lo leia todo y reconocia todos los comandos.
ya he probado cambiando la codificacion a ansi, unicode, UTF-8 y nada, sigue dando error de unrecognised command.
el error no puede estar en otra parte porque el programa no es mio, lo estoy usando de otra persona y para evitar que fuera un problema mio directamente lo baje de vuelta y no toque nada mas, pero el error sigue estando.
mi pregunta es, ¿El error del fgets puede estar relacionado con la codificacion del archivo txt? ¿ sera porque utiliza el caracter de \r de fin de linea de linux?
Muchas gracias por su ayuda!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
void
patch_dialogue(unsigned char *rom, FILE *fp)
{
char buf[8192];
int addr;
int begin = -1;
int check;
dlg_t *c;
while (fgets(buf, sizeof(buf), fp)) {
/* begin ADDR */
if (sscanf(buf, "begin %x", &begin) == 1) {
read_dialogue(rom, begin);
continue;
}
/* end ADDR */
if (sscanf(buf, "end %x", &addr) == 1) {
assert(begin >= 0);
check = write_dialogue(rom, begin);
begin = -1;
if (check == addr);
else if (check < addr) {
fprintf(stdout, "unused space (0x%x < 0x%x)\n", check, addr);
}
else {
fprintf(stderr, "out of space (0x%x > 0x%x)\n", check, addr);
}
continue;
}
else if (strncmp(buf, "addr", 4) == 0) {
c = script_addr(buf, c);
}
else if (strncmp(buf, "seek", 4) == 0) {
c = script_seek(buf, c);
}
else if (strncmp(buf, "skip", 4) == 0) {
c = script_skip(buf, c);
}
else if (strncmp(buf, "insert", 6) == 0) {
c = script_insert(buf, c);
}
else if (strncmp(buf, "delete", 6) == 0) {
c = script_delete(buf, c);
}
/* Comment. */
else if (buf[0] != '\0' && buf[0] != '#' &&
buf[0] != '\n' && buf[0] != '\r') {
fprintf(stderr, "unrecognised command: %s", buf);
}
}
}
void
patch_dlg(const char *fn)
{
FILE *fp = fopen(fn, "r");
if (fp != NULL) {
patch_dialogue(s_rom, fp);
fclose(fp);
}
else {
fprintf(stderr, "Could not open patch %s\n", fn);
}
}
static void
translate_dialogue(void)
{
int i;
for (i = 0; k_script[i] != NULL; i++) {
patch_dlg(k_script[i]);
}
}
v
int
main(int argc, char *argv[])
{
(void)argc, (void)argv;
read_rom("sncsm3.gba");
create_font();
translate_name_entry_menu();
translate_main_menu();
translate_items();
translate_magics();
translate_weapons();
translate_specials();
translate_effects();
translate_bestiary();
translate_dialogue();
write_rom("out.gba");
return 0;
}
lo que hace es llamar a las sucesivas funciones para traducir un texto que va de japones en español, para eso recibe como archivo txt el texto traducido, en fin el caso es que despues de cambiar la configuracion del txt por error( recuerdo que me aparecio un mensaje confirmando si realmente queria cambiarlo) cada vez que lo ejecuto los comandos que lee directamente los direcciona a unrecognised command, como que no puede leerlo.
Haciendo el debug correpondiente me encontre con que en el fgets
(fgets(buf, sizeof(buf), fp))
este me devolvia de retorno no el sizeof buf, sino un valor mucho mayor es como que el fgets es truncado por el \n, sino que antes no pasaba eso, lo leia todo y reconocia todos los comandos.
ya he probado cambiando la codificacion a ansi, unicode, UTF-8 y nada, sigue dando error de unrecognised command.
el error no puede estar en otra parte porque el programa no es mio, lo estoy usando de otra persona y para evitar que fuera un problema mio directamente lo baje de vuelta y no toque nada mas, pero el error sigue estando.
mi pregunta es, ¿El error del fgets puede estar relacionado con la codificacion del archivo txt? ¿ sera porque utiliza el caracter de \r de fin de linea de linux?
Muchas gracias por su ayuda!
Valora esta pregunta


0