Woodstock Geschrieben 4. Oktober 2001 Geschrieben 4. Oktober 2001 Hey, ich bins mal wieder. Also, ich habe jetzt versucht etwas aus einer Datei, die geöffnet habe (Ihr wisst schon, mit fopen), mit fgetc herauszulesen. Nun habe ich das Problem, das er mir dabei ja einen int Wert zurückliefert. Ich möchte aber ja das gelesene (bis zu einem Leerzeichen, wo ich auch noch nicht weiß wie ich das machen soll), als String in einem char Array speichern, um es dann später noch weiter zu untersuchen. Wie kann ich die Konvertierung machen? Bine Zitieren
maddin Geschrieben 4. Oktober 2001 Geschrieben 4. Oktober 2001 versuchs mal damit: int main () { char* buffer = new char[MAX_SIZE]; int pos = 0; // ... datei öffnen ... do { buffer[i] = fgetc(/*Parameter*/); } while (buffer[i++] != '\n'); // ... delete buffer; } ich hoffe das das hilft und nicht so viele fehler enthält. bei fgetc muß du noch die parameter entsprechend einfügen. die kenne ich nicht. ps: ich hoffe du wolltest keine C- Code. Zitieren
Poldi Geschrieben 4. Oktober 2001 Geschrieben 4. Oktober 2001 also, wenn ich dich richtig verstanden hab, möchtest du immer einen sting bis zu einem leerzeichen einlesen, und die einzelnen zeichen des strings in einem array ablegen. ich würd das so machen: #include blabla // max zeilenlänge #define MAXCHARS 2500 void main() { FILE *InFile; char Zeile[MAXCHARS]; int i,k; int wortnummer; int zeichen; int zeilenlaenge; // 500: maximale wort anzahl // 50: maximale wort länge char words[500][50]; InFile = fopen("meineDatei.txt","r"); wortnummer=0; //liest bis dateiende erreicht immer eine zeile ein //und speichert sie in "Zeile" ab while ((fgets(Zeile,MAXCHARS-1,InFile)!=0) { zeilennummer++; zeilenlaenge = strlen(Zeile); zeichen=0; for (i=0;i<zeilenlaenge;i++) { if (Zeile[i]!= " ") { strcpy(words[wortnummer][zeichen],Zeile[i]); zeichen++; } else { zeichen=0; wortnummer++; } } } } Zitieren
Poldi Geschrieben 4. Oktober 2001 Geschrieben 4. Oktober 2001 doppelt gemoppelt <FONT COLOR="#a62a2a" SIZE="1">[ 05. Oktober 2001 09:22: Beitrag 1 mal editiert, zuletzt von Poldi ]</font> Zitieren
Woodstock Geschrieben 4. Oktober 2001 Autor Geschrieben 4. Oktober 2001 Ja, so habe ich das ja auch im letzten Schritt in etwa getan. Nun hat mein CHef aber gesagt, ich solle die Funktion 'fgetc' anwenden und nicht 'fgets'. Das ist mein Problem. Bine Zitieren
Woodstock Geschrieben 4. Oktober 2001 Autor Geschrieben 4. Oktober 2001 Wie muss ich die Bedingung einer while Schleife schreiben, damit ich Zeichen aus der Datei mit 'fgetc' so lange einlesen kann, bis ein Leerzeichen kommt? while (fgetc (fz)!= ??????? ) { bla bla bla } Zitieren
maddin Geschrieben 5. Oktober 2001 Geschrieben 5. Oktober 2001 versuchs mal mit int main() { char buffer[250]; int pos; while (buffer[pos++] = fgetc(fz) != ' '); } dann werden die zeichen auch gleich noch gespeichert. Zitieren
Poldi Geschrieben 5. Oktober 2001 Geschrieben 5. Oktober 2001 du hast das do vergessen: do { bla bla bla; } while (Bedingung); du kannst dir auch noch n int array zusätzlich anlegen, in dem du dir merkst, wo in dem anderen array das nächste wort anfängt. dann kannst du die später auch wieder ausgeben. Zitieren
gajUli Geschrieben 5. Oktober 2001 Geschrieben 5. Oktober 2001 while (buffer[pos++] = fgetc(fz) != ' '); Vorsicht! Wenn ich mich nicht sehr taeusche, fehlen da Klammern. (Das Ergebnis der Abfrage wird in den Buffer geschrieben, nicht das gelesene Zeichen.) Uli Zitieren
Crush Geschrieben 5. Oktober 2001 Geschrieben 5. Oktober 2001 Nur als Anmerkung: Solltest Du CStrings haben, kannst Du über GetBuffer() einen Pointer auf den Inhalt bekommen und mit GetBufferSetLength() die Länge des gewünschten Char-Arrays bestimmen: Achtung!!! Es kann u.U. sein, daß man noch das 0-er Bytes ans Ende ranhängen muß (auf jeden Fall wenn GetBufferSetLength den String nach unten begrenzt) <FONT COLOR="#a62a2a" SIZE="1">[ 05. Oktober 2001 11:04: Beitrag 1 mal editiert, zuletzt von Crush ]</font> Zitieren
maddin Geschrieben 5. Oktober 2001 Geschrieben 5. Oktober 2001 @uli: stimmt die klammern fehlen. habe ich wohl vergessen. vergleiche kommen vor zuweisungen. kann ja mal passieren @poldi: dir kann ich aber nicht zustimmen das do habe ich nicht vergessen. richtig müsste es dann heisen int main() { char buffer[255]; int pos = 0; while ((buffer[pos++] = fgetc(fz)) != ' '); } ps: zählt sowas eigentlich schon zum guten und von allen geliebten spagethicode ??? <FONT COLOR="#a62a2a" SIZE="1">[ 05. Oktober 2001 11:12: Beitrag 1 mal editiert, zuletzt von maddin ]</font> Zitieren
gajUli Geschrieben 5. Oktober 2001 Geschrieben 5. Oktober 2001 Kein Problem, maddin, ich bin da auch schon drauf reingefallen... In C gilt es nicht als Spaghetticode, zumal es sehr praktisch, kurz, uebersichtlich und syntaxregelkonform ist. K&R bringen es ja auch in ihrem Standardwerk. Den Freaks von der Pascalaesthetikerfront faellt natuerlich jedesmal der Kitt aus den Zaehnen, wenn die sowas sehen. Uli Zitieren
maddin Geschrieben 5. Oktober 2001 Geschrieben 5. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von EisenUli: <STRONG> Den Freaks von der Pascalaesthetikerfront faellt natuerlich jedesmal der Kitt aus den Zaehnen, wenn die sowas sehen. Uli</STRONG> Zitieren
hoagi Geschrieben 5. Oktober 2001 Geschrieben 5. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> while ((buffer[pos++] = fgetc(fz)) != ' '); Zitieren
Woodstock Geschrieben 9. Oktober 2001 Autor Geschrieben 9. Oktober 2001 Hey, ich danke Euch allen erst einmal, war ganz schön viel zu lesen nach einem so langen Wochenende, und werde jetzt versuchen das, was ich hier bei Euch gelesen haben umzusetzen (ohne wirklich Eure Lösungen zu benutzen, denn ich will dabei ja auch was lernen). Danke Bine Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.