Hmm, habs jetzt so versucht aber in den Rückgabewerten steh nur Müll und der Compiler gibt mir bei strcat Warnungen aus, weil ich aus einem unsigned char einen (char*) mache...
Funktionen:
Code:
// Findet das nächste Zeichen mit dem übergebenen Wert in einer Datei, ansonsten wird -1 zurückgegeben
unsigned long int tpx_find_char(char s) {
unsigned long int count=-1;
unsigned long int seek=file.length;
char p;
do {
count++;
p = ffread();
} while (!((--seek<0) || (p==s)));
return count;
}
int tpx_read_tag(char* name, char* value) {
char s;
// Wenn keine Datei offen ist, abbrechen
if (!fileopened) {
return 1;
}
// Beginn des tags finden
tpx_find_char('<');
unsigned long int seek=file.length;
s = ffread();
seek--;
do {
strcat(name, (char*) s);
s = ffread();
} while ((s=='=') || !(seek--));
s = ffread();
seek--;
do {
strcat(value, (char*) s);
s = ffread();
} while ((s=='>') || !(seek--));
return 0;
}
Und der Aufruf:
Code:
int main(void) {
char *tag;
char *value;
lcd_init();
lcd_clear();
sd_init();
lcd_clear();
tag = malloc(30);
value = malloc(30);
tag[0] = '\0';
value[0] = '\0';
char file[] = "testdat.txt";
fat_str(file);
ffopen(file);
lcd_clear();
tpx_read_tag(tag, value);
lcd_string("T: ");
lcd_string(tag);
lcd_set_cursor(0,1);
lcd_string("V: ");
lcd_string(value);
_delay_ms(1000);
lcd_clear();
tag[0] = '\0';
value[0] = '\0';
tpx_read_tag(tag, value);
lcd_string("T: ");
lcd_string(tag);
lcd_set_cursor(0,1);
lcd_string("V: ");
lcd_string(value);
_delay_ms(1000);
ffclose();
return 0;
}
Lesezeichen