someoneoutthere
Bloody Newbie
|
peace ![;)](/images/smilies/wink.gif) muss von einem textfile, das ich bereits geöffnet habe, ein wort einlesen, das bearbeiten, dann das nächste wort einlesen, etc. wie lese ich jetzt wortweise ein? fscanf darf ich nicht verwenden (damit hatte ich es schon gelöst). ... theoretisch is klar: zeichen einlesen bis leerzeichen (oder \t oder \n) kommt, dann ist ein wort vollständig. aber warum geht das bei mir nicht... irgendwo hab ich fehler. könntet ihr vielleich codevorschläge posten? thx
|
xdfk
pädagogisch wertvoll
|
poste deinen fehlerhaften code... ich hab erst vor kurzem so einen stringparser gecoded.
|
someoneoutthere
Bloody Newbie
|
so circa,.. aber ich bastle im moment ständig dran rum ;(
int done = 0; int i = 0; char word[MAX_LENGTH]; char c;
c=fgetc(fin); while (c!= ' ') { word[i++] = c; c=fgetc(fin); }
|
xdfk
pädagogisch wertvoll
|
int loop=0; int space=0; char *text = malloc((MAX_LENGTH+1)*sizeof(char)); char *just_one_word; text="just another test temp text";
----hier noch große schleifer herum wür eben die ganze eingabe-- for (loop=0;isspace(text[loop]);loop++); just_one_word = malloc((loop-space+1)*sizeof(char)); strncopy(just_one_word,&text[space],loop-space); jetzt das einzelne wort in just_one_word verarbeiten danach free (just_one_word); //oder auch gleich nur einmal speicher reservieren in dem aber alle wörter platz haben müssen //leerzeichen usw musst du noch korrigieren ob sie mitkopiert werden oder nicht ------ ende schleife ----------- free(text);
|
manalishi
tl;dr
|
du könntest beim while EOL und EOF noch berücksichtigen.. z.b. while(c!=' ' && !feof(fin))
zum debuggen könntest du beispielsweise jedes zeichen, das du in den string word schreibst, gleich wieder ausgeben.
|
daff
I hate your life
|
könntest du nicht fscanf() verwenden um den stream zu lesen und um die größe des pointers wort für wort weiterzuhüpfen? bei leerzeichen stoppt fscanf() eh ganz brav. ich bild mir ein das mal so gemacht zu haben...JAT...
|
someoneoutthere
Bloody Newbie
|
fscanf darf ich leider nicht verwenden, stattdessen sollte ich fgets/sscanf nehmen, oder halt irgendwas anderes.
|
someoneoutthere
Bloody Newbie
|
while (fgets(line, 256, fin) != NULL) { while (sscanf(line, "%s", word) != 0) {
hab ich im moment.. aber liest mir immer nur das erste wort;(
|
FMFlash
tranceCoder
|
hier bitte, einlesen aus einem file, die worte werden in einem struktur-array gespeichert:
#include <string.h> #include <fcntl.h> #include <sys/stat.h> #include <io.h> #include <stdio.h>
typedef char KBYTE [1024];
typedef struct { char str [64]; }TOKEN;
int main (int argc, char **argv) { KBYTE in; char buf [1000000]; char *pch; long count = 0, x, read;
TOKEN tok [100];
int file = _open ("test.txt", _O_RDONLY | _S_IREAD | _O_TEXT);
strcpy (buf, "");
while (!_eof (file)) { read = _read (file, (char*)in, 1024); in [read] = '\0';
strcat (buf, in); }
for (x = 0; x < (long)strlen (buf); x++) { if (buf [x] == ' ') count++; }
pch = strtok (buf, " ");
strcpy (tok[0].str, pch);
for (x = 1; x < count; x++) { pch = strtok (NULL, " "); strcpy (tok[x].str, pch); }
pch = strtok (NULL, "\0"); strcpy (tok[x].str, pch);
for (x = 0; x <= count; x++) printf ("token #%d: %s\n", x, tok[x].str);
_close (file);
return 0; }
Bearbeitet von FMFlash am 10.12.2002, 14:50
|
someoneoutthere
Bloody Newbie
|
while ((c = fgetc(fin)) != EOF) { if ((c == 10) || (c==' ') || (c=='\t')) break; word[i++] = c; } word[i] = '\0';
while (!feof(fin)) {
.. und dann den einlesevorgang hier nochmal }
so gehts
|