.txt Datei einlesen, Inhalt trennen und einzeln speichern

Mahatmas

Mitglied
Hallo zusammen, bin neu hier und hab da auch gleich einmal ein Problem...

Ich will mit C++ (blutiger Anfänger) eine .txt-Datei einlesen und sie in verschieden Felder speichern.

Der Text hat folgende Struktur:

Funktionswort1 <tab> Text <tab> anderer Text <return>
Funktionswort2 <tab> wieder anderer Text <tab> und nochmal Text <tab> schon wieder <return>
Funkrionswort3 <tab> ...
...

d.h. ich brauch jeden durch <tab> getrennten Teil in einem extra Array, muss aber erkennen wann es ein Funktionswort ist und welcher Text zu diesem Funktionswort gehört (also jeder Text in der Zeile zu dem dazugehörigen Funktionswort)

Wär super, wenn mir da jemand weiterhelfen kann...
 
nein,

ich habe die .txt-Datei, die diesen Aufbau hat.
Ich will diese einlesen. Die eingelesenen "Blöcke" dann in einzelnen Feldern speichern, damit ich die dann weiter verarbeiten kann.

Wichtig nur, dass eine Zeile immer zusammenhängend ist, also immer ein "Funktionswert" am Anfang und danach durch Tabs getrennt mehrere Texte in der Zeile.
 

Anhänge

  • test.txt
    171 Bytes · Aufrufe: 126
Dann leg dir doch einfach ein string array an, lies den Text in das array mit fscanf oder fgets so, das du zB in deinem array text[0] dann dein "Funktionswort"; text[1] dann Text usw.
Wie man die Datei öffnet weißt du

Gruß
Dorschty
 
Hi.

Das kannst du relativ einfach mit der getline Funktion machen. Bsp:

C++:
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
   ifstream fin("test.txt");

   if (fin.is_open())
     {
        string line;

        while(getline(fin, line))
          {
             istringstream sin(line);

             string fword;
             if (getline(sin, fword, '\t')) 
               {
                  cout << fword << endl;
               }
          }
     }
   else
     {
        cerr << "could not open file." << endl;
     }
}
Gruß
 
Ich hab sie mit fopen geöffnet, weiß nur nicht, ob dass dann so funktioniert.

FILE *ptr;
ptr = fopen("Test.txt", "w+");

Wenn ich dann: printf( "%s\n", *ptr ); mach, gibt der mir immer [null] aus...

Mit string array hab ich auch noch ein Problem. Hab zwar #include <string.h> gemacht, aber er meckert, dass er string nicht kennt.
Hättest du da vielleicht ein kleines Bsp.? Wär super...
Danke im vorraus.

gruß
Flo
 
Das er dir immer [null] anzeigt ist kein Wunder, da er die Datei nicht öffnen kann und der Rückgabewert dafür ist eben Null. Ich vermute du hast deine .txt im falschen Ordner! Mach doch einfach ein #define PATH "den kompletten Pfad zur Datei" und öffne es mit:

if((ptr=fopen(PATH,"r"))==NULL)
{
...
}
else
{
printf("Kann Datei nicht oeffnen");
}

für das Problem mit dem String... füge unter deinen includes und defines ein:
using namespace std;
und versuchs nochmal! Dann müsste es gehen.

Gruß
Dorschty
 
Noch was! Du solltest die Datei auf keinen Fall mit "w+" öffnen, da sonst der Inhalt der Datei gelöscht wird! Wenn du nur lesen willst öffne sie mit "r".

Gruß
Dorschty
 
So erstmal vielen Dank!

Das klappt jetzt erstmal soweit, zumindestens Einlesen, das Problem mit "string" behoben. Bastel jetzt mal weiter. Seh nur, dass ich jetzt noch das Problem habe, dass ich bei der Version von "deepthroat" zwar die "Funktionswörter" abfangen kann, aber dann die hinteren Zeilenteile noch zusammen stehen. Mal schauen...

Danke...

Flo
 
Zurück