Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
durch Komma getrennte wörter aus zeichenkette auslesen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
BB
Gast





BeitragVerfasst am: 21. Jun 2002 17:01   Titel: durch Komma getrennte wörter aus zeichenkette auslesen

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
 

Anonymous
Gast





BeitragVerfasst am: 21. Jun 2002 21:08   Titel: Re: durch Komma getrennte wörter aus zeichenkette auslesen

http://mrunix.de/forums/showthread.php?s=&threadid=29454
 

Udo Maslo
Gast





BeitragVerfasst am: 23. Jun 2002 16:08   Titel: Re: durch Komma getrennte wörter aus zeichenkette auslesen

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
Gast





BeitragVerfasst am: 23. Jun 2002 23:57   Titel: Re: durch Komma getrennte wörter aus zeichenkette auslesen

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

code:


#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\n", variable);
token=strtok(NULL, delimiter);
}
return(0);



thx
 

BB
Gast





BeitragVerfasst am: 24. Jun 2002 0:03   Titel: Re: durch Komma getrennte wörter aus zeichenkette auslesen

Korrektur:

code:

#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\n", variable);
token=strtok(NULL, delimiter);
}
return(0);
}

 

Udo Maslo
Gast





BeitragVerfasst am: 30. Jun 2002 2:06   Titel: Re: durch Komma getrennte wörter aus zeichenkette auslesen

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
Gast





BeitragVerfasst am: 30. Jun 2002 20:40   Titel: Re: durch Komma getrennte wörter aus zeichenkette auslesen

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 == ','){
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

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

BB
Gast





BeitragVerfasst am: 30. Jun 2002 22:08   Titel: Re: durch Komma getrennte wörter aus zeichenkette auslesen

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
Gast





BeitragVerfasst am: 30. Jun 2002 22:23   Titel: Re: durch Komma getrennte wörter aus zeichenkette auslesen

code:

#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);
}




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
Gast





BeitragVerfasst am: 01. Jul 2002 0:05   Titel: Re: durch Komma getrennte wörter aus zeichenkette auslesen

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
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy