Text auslesen und damit arbeiten? Deklarationskonflikte...



  • Hallo erstmal,
    ich möchte zeile für Zeile aus ner txt auslesen und habe mir folgende Lösung ausgedacht:
    Ich lese Zeichen für Zeichen ein und hänge es an einen String sollange kein "\n" auftaucht...sobald ein "\n" auftaucht wird der String ausgegeben und wieder gelöscht und das Spielchen geht sollange weiter bis die Datei durch ist.
    Hierbei habe ich das problem das ich es nicht hinbekomme den char c den ich mit fgetc bekommen irgendwie anzuhängen. Bekomme immer Fehlermeldungen das Konvertierungen von int nach char fehlgeschlagen sind bzw. das char erwartet wird aber char* gefordert is etc. Versuche den Code anzupassen sind daran gescheitert das fgets dann nichtmehr funktionieren würde. Habe auch schon strcpy(temp,c); versucht um ein dublikat herzustellen aber bisher sind alle versuche fehlgeschlagen.

    Würde mich freuen wenn mir jemand helfen könnte einen Schritt weiterzukommen.

    char c;
      char *line="";
    
         while(ftell(stream) <= maxsize)
         {
              c = fgetc (stream);
              if(c=='\n')
              {
                  //ausgabe und löschen
                  ListBox1->Items->Add (line);
                  line="";
              }
              else
              {
                  //zeichen zum string hinzufügen um die Zeile aufzubauen.
                  strcat(line,c);
              }
          }
    

    dann hab ich noch eine Frage:

    int i=line.find_first_of('\n');
    

    Bei den ganzen string.h sachen bekomme ich immer derartige Fehlermeldungen...

    [C++ Fehler] Unit1.cpp(116): E2294 Auf linker Seite der Struktur ist . oder .* erforderlich
    
    //#include <vcl.h>
    #pragma hdrstop
    #include <stdio.h>
    //#include <cstdlib>
    #include "Unit1.h"
    #include <string.h>
    


  • Erstens würde ich line eher als "char line[MAXSIZE];" deklarieren, weil andernfalls schreibst du in Speicherbereiche, die dir nicht gehören (oder du reservierst dir den Platz mit malloc()).
    Zweitens erwarten die str..-Funktionen einen char* als Parameter, also müßtest du "strcat(line,&c);" schreiben (oder noch besser: "line[++end]=c;").

    Und drittens ist find_first_of() keine Methode eines C-Strings (char*), sondern der C++ Klasse std::string.



  • Danke für die Hilfe.
    Da erklärt sich doch gleich mal einiges von selbst.

    Hmm, aber ein paar neue neue String funktionen könnte ich schon gebrauchten.
    Was schlagen die Ammstars vor?



  • Verwende gleich STL-Klassen, statt dich mit char* rumzuplagen 😉
    [das gilt allerdings nur, wenn du einen C++ Compiler verfügbar hast]

    Für reines C bleiben dir nur die str..-Funktionen - die Alternative zu find_first_of heißt übrigens man: strcspn.



  • jupp, hab inzwischen wie ichs geregelt kriege. Lag am fehlenden

    using namespace std;

    Hab ich das richtig verstanden? Keine Chars mehr benutzen und nurnoch strings?

    hoffe das ich das richtig verstanden habe und ich damit ein paar Deklarationsfehler einsparen kann.



  • char sind schon nützlich, aber char* kannst du in C++ umgehen (da sind std::string sicherer in der Anwendung).

    Zur Einstimmung empfehle ich mal www.cppreference.com (ist allerdings englisch).



  • string ist C++
    char ist ein zeichen, char*/char[] ein c string

    c strings und c++ strings sind bedingt kompatibel:
    string a = "asdfg";
    char *b = a.c_str();


Anmelden zum Antworten