Textzeilen in Array einlesen

GoodBoy123

Grünschnabel
Hallo
Ich hab ein kleines Problem. Ich will aus einer Textdatei Zeilen auslesen und jeweils mit strtok splitten und die Ergebnisse in ein Array schreiben. Steh da komplett auf dem Schlauch da ich noch gar nicht mit C gearbeitet habe. Das öffnen der Datei und das Zeilenweise auslesen klappt soweit. Nur mit dem Array hab ich so meine Schwierigkeiten. Für eine schnelle Antwort währe ich Dankbar.

Ach ja! Code sieht in etwas so aus
// Datei öffnen
file.open("file.txt", ios::in);
if (file.good())
{
// Wenn die Datei geoeffnet werden konnte...
// An den Anfang der Datei springen
file.seekg(0L, ios::beg);
while (! file.eof())
{
// Die Datei zeilenweise auslesen
file.getline(zeile, 1024);
//Split der Zeile mit Trenner |
split = strtok(zeile,"|");
// Ausgabe des Split
while (split != NULL)
{
printf("Zeile %/s",split);
split = strtok (NULL, "|");
}
}
}
else
{
// Wenn die Datei nicht geoeffnet werden konnte,
// aus welchen Gruenden auch immer...
printf("Datei nicht gefunden.");
}


Mfg GoodBoy123
 
Zuletzt bearbeitet:
Hi!
Stimmt. Eine Frage ist da nicht zu sehen. Also hier dann mal die FRAGE
Wie bekomme ich die Ergebnisse des Split's in ein 2-dimensionales dynamisches Array?
Mfg GoodBoy123
 
Hi!
Stimmt. Eine Frage ist da nicht zu sehen. Also hier dann mal die FRAGE
Wie bekomme ich die Ergebnisse des Split's in ein 2-dimensionales dynamisches Array?
Mfg GoodBoy123
 
Hallo,

ich würde da nicht mit einem 2 dimensionalen Array arbeiten, sondern eine Helperclass bauen und diese dann für jeden split befüllen

z.b.:
C:
public class split_helper
{
   public:
         split_helper(): m_lpszsplit1(NULL), m_lpszsplit2(NULL){}

         char *m_lpszsplit1;
          char *m_lpszsplit2;
};

void main()
{
   split_helper *lsplit_helper = NULL;
   ....

   lsplit_helper = new split_helper[zeilencount];
// und dann einfach in die jeweiligen member schrieben
}

das halte ich für die Bessere und vor allen Dingen tranparentere Lösung.

Grüße
R.
 
Hallo
Danke erstmal für die prompte Hilfe.
Ich hol mal ein bischen weiter aus um die Problematik näher zu erläutern und warum ich mir ein 2-dimensionales Array ausgesucht habe. Also ich bekomme ein Text-File in dem durch "|" getrennt Werte stehen. Dies sind eine Zeilennummer, x1,y1,z1 & x2,y2,z2 Koordinaten und ein weiterer Wert. Diese Einträge sollen nach meiner Überlegungen in ein Array geschrieben werden das ich dann an eine Funktion übergebe. Diese Funktion berechnet dann welche der durch die Koordinaten gebenen Geraden sich mit einer weitern Geraden schneidet. Da die Werte aus dem Textfile sich nicht ändern, aber die Werte der zweiten Geraden sich laufend ändern hab ich gedacht das mit dem Array währe die optimalste Lösung. Berichtigt mich wenn ich da komplett Falsch liege und weitere lösungshinweise für das füllen des Array's bitte.
Mfg GoodBoy123
 
Zuletzt bearbeitet:
Hallo,

du willst also eine etwas komplexere Struktur im cache halten. Wie gesagt da bietet sich natürlich das Klassendesign um so mehr an. Dadurch hast du nur ein eindemensionales Array(welches m. E. einfacher zu verwalten ) und für jede zeile im Prinzip ein Object mit den relevanten Daten darin. Ich bin mir auch nicht sicher ob sich ein zweidemnsionales array in deinem Fall wirklich so anbietet da du ja doch eine ganze Menge daten ausliest.

Grüße
R.
 
Hallo,

wenn du schon C++ benutzt wieso verwendest du da keine Streams um nach Trennerkriterien Strings zu zerhacken. strtok ist zwar auch ne Möglichkeit allerdings tuts bei dir auch ein istringstream. Und fürs array nimmst du einen stl vector.

C++:
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <iterator>

using namespace std;

int main()
{
    // file with | seperated lines
    ifstream in("test.txt");
    char line[1024];
    vector<string> tokens;

    if (in) {
        while (in.getline(line, 1024)) {
            istringstream line_is(line);
            char token[1024];

            while (line_is.getline(token, 1024, '|'))
                tokens.push_back(token);
        }
    }

    // just output the content of  tokens
    copy(tokens.begin(), tokens.end(), ostream_iterator<string>(cout, "\n"));
}

Gruß,
RedWing
 
Hallo! Ich benutze C und nicht C++
Hab jetzt eine Lösung gefunden die soweit funktioniert.
Code:
ifstream file;
char *zeile;
char *split;
int   i=0;
int   j=0;
int   border[255][255];

file.open("test.txt", ios::in);
{
     file.seekg(0L, ios::beg);
     while (! file.eof())
          {
               i = i + 1;
               file.getline(zeile, 1024);
               split = strtok(zeile,"|");
                    while (split != NULL)
                         {
                              j = j + 1;
                              border [i][j] = atoi(split);
                              split = strtok (NULL, "|");
                         }
          }
}

Danke
 

Neue Beiträge

Zurück