PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Integer Variable in String einfügen



Maverick83
13.01.2007, 14:57
Hallo Zusammen,

ich möchte gerne 16 verschiedene Files aus einer SD karte auslesen, diese Files unterscheiden sich nur in ihrem Namen an einer fortlaufenden Zahl.
zb. "ROM1.txt", "ROM2.txt" usw.

ich habe mir nun gedacht, dass ich eine for Schleife mache die von 1 bis 16 zählt und dass ich dann den Integer Wert in einen string umwandeln kann und den an den bestehenden String anhängen kann.

z.b. so:

int i;
char string[10];
for(i=1;i<17;i++){
sprintf(string,"%d",i);
file_fopen(&file_r,&efs.myFs,"ROM"string".txt",'r')
}

nur geht das leider nicht so.

Kann mir jemand helfen?
Wie macht man dass richtig?

SprinterSB
13.01.2007, 15:09
Den String auf diese Weise anhängen geht nur mit statischen, konstanten Strings.C selbst hat keine Bordmittel zur Stringmanipulation wie zB Java.

Am einfachsten und konfirtabelsten ist es , wenn du die Möglichkeit hast, die Dateien nicht durchzunumerieren, sondern durchzubuchstabieren:



char string[10] = "ROM_*.txt";

void foo()
{
unsigned char i;
for (i=0; i<16; i++)
{
string[4] = 'A' + i;
file_fopen(&file_r,&efs.myFs, string, 'r')
}
...
}

Maverick83
13.01.2007, 15:28
Danke SprinterSB,

Ich habe deinen Ansatz übernommen und ein wenig abgeändert.
wenn man
string[4] = 0x30 + i;
macht werden Zahlen an die 4.Stelle geschrieben weil 0x30 = '0' ist.

Danke!

SprinterSB
18.01.2007, 21:48
Tipp: Du kannst direkt hinschreiben

string[4] = '0' + i;

ist was lesbarar :D

Technikus
19.01.2007, 14:55
Für das einfache Einfügen einer Ziffer sind die genannten Lösungen recht brauchbar und auch platzsparend. Wer will, hat in C aber auch mächtige Werkzeuge zur Stringmanipulation zu Verfügung, man muß sie nur benutzen können.
Der richtige Einsatz von sprintf sieht hier so aus


unsigned int i;
...
sprintf(string, "ROM%d.txt", i);


Allerdings kostet sprintf relativ viel Speicher. Der Einsatz von utoa (macht Strings aus integer-Zahlen) und strcat (hängt strings aneinander) ist da manchmal geschickter.

Servus
Technikus