durch Komma getrennte wörter aus zeichenkette auslesen

Post Reply
Message
Author
BB

durch Komma getrennte wörter aus zeichenkette auslesen

#1 Post by BB »

hi .. ich habe eine Zeichenkette vom typ char mit folgendem Inhalt
milch,kaffee,zucker

nun möchte ich z.Bsp, daß alle wörter, welche durch das komma getrennt sind als extra Variable haben ...

das Problem dabei ist, daß ich nie weis, wie viele Wörter da enthalten sind.

Ich danke schon mal


Udo Maslo

Re: durch Komma getrennte wörter aus zeichenkette auslesen

#3 Post by Udo Maslo »

Also, wenn Dein "Komma"-String erstmal im Speicher ist hast Du doch schon die halbe Miete. Zeiger merken, ist erstes Wort. Bemühe nun noch eine Stringfunktion, welche nach Chars (eben Deine Kommata) in einem String sucht, ersetze sie durch '\0' (asciiZERO), Zeiger++ merken (2. Wort), ...
Ob Du nun diese Zeiger auf Deine Worte in einem dynamisches Array, Liste oder was auch immer Dir merkst bleibt Dir überlassen.
Schön wäre es wenn Hilfesuchende etwas mehr zu ihren Problemen schreiben würden. Brauchst Du wirklich extra Variablen für Deine Worte? Es ist ja z.B auch üblich mit Listen der Art 'blala\0boblo\0lalilu\0\0' zu hantieren.

BB

Re: durch Komma getrennte wörter aus zeichenkette auslesen

#4 Post by BB »

hi .. danke für die antworten ...hab eine Lösung:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">

#include <string.h>

main(void)
{
FILE *fp;
char liste[] = "bla,blabla,blablabla";
char delimiter[] = ",";
char variable[16];
char *token=strtok(liste, delimiter);

while(token != NULL) {
strcpy(variable, token);
printf("Bearbeite: %s\<!--no-->n", variable);
token=strtok(NULL, delimiter);
}
return(0);
</font><hr></pre></blockquote>

thx

BB

Re: durch Komma getrennte wörter aus zeichenkette auslesen

#5 Post by BB »

Korrektur:

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#include <stdio.h>
#include <string.h>

main(void)
{
FILE *fp;
char liste[] = "bla,blabla,blablabla";
char delimiter[] = ",";
char variable[16];
char *token=strtok(liste, delimiter);

while(token != NULL) {
strcpy(variable, token);
printf("Bearbeite: %s\<!--no-->n", variable);
token=strtok(NULL, delimiter);
}
return(0);
}
</font><hr></pre></blockquote>

Udo Maslo

Re: durch Komma getrennte wörter aus zeichenkette auslesen

#6 Post by Udo Maslo »

strok - eine sehr "lustige" C-Funktion. Probiert doch mal aus, was entsteht, wenn der zu analysierende String
leere Felder enthält. So etwas wie `wert1,wert2,,wert4,,,wert7' ist doch eine ganz alltägliche Sache bei einem DB- oder SSheet-Export ...

... übrigens, das mit

> char variable[16];
> ...
> strcpy(variable, token);

steht hoffentlich in keinem ernsten Programm!

pauls

Re: durch Komma getrennte wörter aus zeichenkette auslesen

#7 Post by pauls »

man strtok

...

BUGS
Never use these functions. If you do, note that:

These functions modify their first argument.

The identity of the delimiting character is lost.

These functions cannot be used on constant strings.

The strtok() function uses a static buffer while parsing, so it's not thread
safe. Use strtok_r() if this matters to you.

...

Benutze strtok immer wieder rate aber grundsätzlich davon ab!
Besser irgendwas selber schreiben wie z.b.:


int i = 0;
char *variable;
char *help = (char *) calloc(sizeof(char),strlen(liste) +1);
strncpy(help,liste,strlen(liste));
help[strlen(liste)] = ',';
help[strlen(liste)+1] = '\0';

do{
if(help<i> == ','){
if(i >0){
variable = (char *) calloc(sizeof(char),i);
strncpy(variable,help,i);
help = &help[i+1];
i=-1;
printf("Wort: %s
",variable);

}else{
help = &help[i+1];
i=-1;
}
}
i++;
}while(i < strlen(help));

das sollte dann auch im Fall von ,,,wert1,,,wert2,,wert3,,,,, klappen <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

generell sollte man immer darauf achten das man strn* anstat str* benutzt ...

BB

Re: durch Komma getrennte wörter aus zeichenkette auslesen

#8 Post by BB »

sorry, aber ich bin noch anfänger

pauls:
dank dir für dein Beispiel, aber er funktioniert bei mir auch nicht ... wie sehe meine Lösung ohne strtok aus ?
sorry, aber ich stecke wirklich noch in den Anfängen .

BB

Re: durch Komma getrennte wörter aus zeichenkette auslesen

#9 Post by BB »

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#include <stdio.h>
#include <string.h>

main(void)
{
FILE *fp;
char liste[] = "eins,zwei,drei,,vier,,,fuenf";
char delimiter[] = ",";
char variable[16];
char *token=strtok(liste, delimiter);

while(token != NULL) {
strcpy(variable, token);
printf("Bearbeite: %s
", variable);
token=strtok(NULL, delimiter);
}
return(0);
}
</font><hr></pre></blockquote>


bringt bei mir die ordnungsgemäße ausgabe
Bearbeite: eins
Bearbeite: zwei
Bearbeite: drei
Bearbeite: vier
Bearbeite: fuenf


Udo:
... übrigens, das mit

> char variable[16];
> ...
> strcpy(variable, token);

steht hoffentlich in keinem ernsten Programm!

warum ist das falsch ? was ist daran falsch ? Weil variable die feste größe 16 hat ? Würdest du mir es erklären ?


vielen Danke euch

pauls

Re: durch Komma getrennte wörter aus zeichenkette auslesen

#10 Post by pauls »

was funzt denn an dem Beispiel nich?

zu strcpy: genau das ist das problem...
wenn du es so machst schaust du nicht nach ob das wort vieleicht mehr als 16 zeichen hat (bzw. 15 + '\0')
das kann dann bestenfalls zu nem segv führen aber es hat eben vorallem das risiko eines bufferoverflows!

Deshalb einfach immer erst:

char bla[16];
if(strlen(src) < 16)strcpy(bla,src);

aber besser ist noch:

strncpy(bla,src,15);

dann ist es sicher...

ich glaub in deinem Fall fährst du mit strtok am besten...(aber nimm strncpy anstat strcpy)

bis denne

p.s.: alle waren mal anfänger <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

Post Reply