Die Überschrift sagt es schon: Ich möchte eine Textdatei in ein Array laden, damit ich mit diesem Array weiter arbeiten kann.
Dazu hatte ich nachfolgendes Programm geschrieben.
Das Hauptproblem bestand darin, dass ich den Einlesepuffer der fgets()-Funktion nicht so ohne weiteres einem char array zuweisen kann, da der Compiler anfangs gemeckert hatte, man dürfte einem array keine Variable vom Typ char zuweisen. Als ich auf die Idee gekommen bin, Zeiger für den Puffer zu verwende
n, konnte ich zwar endlich den inhalt der Datei in den array ablegen, jedoch als ich den array anzeigen ließ, kamen nur viele "=" und am Ende stand "²²²".
Ich bin mir sicher, dass man den Puffer direkt einem Array anhängen können müsste, doch dies scheiterte immer am Compiler, obwohl ich mir ziemlich sicher war, das die Syntax korrekt gewesen ist.
Was sagt ihr dazu?
Ich bedanke mich schonmal im Voraus für eure Hilfe
mfg
Br4!n
(PS: Die Te(x/s)tdatei bestand aus dem Alphabet auf 3 Zeilen verteilt)
#include <iostream.h>
#include <stdio.h>
FILE *Datei1;
int Zeichenanzahl = 0;
char *pArbeitsarray;
char Einlesepuffer[2];
char *pneuer_Einlesepuffer;
void main(void)
{
Datei1 = fopen("c:\\text.txt","r");
while(feof(Datei1) == 0)
{
fgets(Einlesepuffer,2,Datei1);
cout << Einlesepuffer;
Zeichenanzahl = Zeichenanzahl + 1;
}
pArbeitsarray = new char[Zeichenanzahl];
pneuer_Einlesepuffer = new char[Zeichenanzahl];
while(feof(Datei1) == 0)
{
fgets(pneuer_Einlesepuffer,Zeichenanzahl,Datei1);
pArbeitsarray = pneuer_Einlesepuffer;
}
fclose(Datei1);
cout << "\n" << Zeichenanzahl << "\n" << pArbeitsarray << "\n";
cin;
}
Dazu hatte ich nachfolgendes Programm geschrieben.
Das Hauptproblem bestand darin, dass ich den Einlesepuffer der fgets()-Funktion nicht so ohne weiteres einem char array zuweisen kann, da der Compiler anfangs gemeckert hatte, man dürfte einem array keine Variable vom Typ char zuweisen. Als ich auf die Idee gekommen bin, Zeiger für den Puffer zu verwende
n, konnte ich zwar endlich den inhalt der Datei in den array ablegen, jedoch als ich den array anzeigen ließ, kamen nur viele "=" und am Ende stand "²²²".
Ich bin mir sicher, dass man den Puffer direkt einem Array anhängen können müsste, doch dies scheiterte immer am Compiler, obwohl ich mir ziemlich sicher war, das die Syntax korrekt gewesen ist.
Was sagt ihr dazu?
Ich bedanke mich schonmal im Voraus für eure Hilfe
mfg
Br4!n
(PS: Die Te(x/s)tdatei bestand aus dem Alphabet auf 3 Zeilen verteilt)
#include <iostream.h>
#include <stdio.h>
FILE *Datei1;
int Zeichenanzahl = 0;
char *pArbeitsarray;
char Einlesepuffer[2];
char *pneuer_Einlesepuffer;
void main(void)
{
Datei1 = fopen("c:\\text.txt","r");
while(feof(Datei1) == 0)
{
fgets(Einlesepuffer,2,Datei1);
cout << Einlesepuffer;
Zeichenanzahl = Zeichenanzahl + 1;
}
pArbeitsarray = new char[Zeichenanzahl];
pneuer_Einlesepuffer = new char[Zeichenanzahl];
while(feof(Datei1) == 0)
{
fgets(pneuer_Einlesepuffer,Zeichenanzahl,Datei1);
pArbeitsarray = pneuer_Einlesepuffer;
}
fclose(Datei1);
cout << "\n" << Zeichenanzahl << "\n" << pArbeitsarray << "\n";
cin;
}
void main()?! naja..
und wieso nutzt du für dateien nicht auch streams?
char buf[100];//char array
ifstream file("test.txt", ios::in );
while(file.getline(buf,100)){}
oder so
und wieso nutzt du für dateien nicht auch streams?
char buf[100];//char array
ifstream file("test.txt", ios::in );
while(file.getline(buf,100)){}
oder so
Streams kenne ich noch gar nicht, aber ich schaue mal in mein Buch, ob ich dort dazu was finde.
Schonmal danke für den Tip!
Schonmal danke für den Tip!
Streams erleichtern einem das Einlesen von Textdateien erheblich, jedoch besteht immer noch das Problem die Zeichen des Textes in einen dynamischen Array zu laden.
Hat vielleicht hierzu jemand einen Ansatz?
Hat vielleicht hierzu jemand einen Ansatz?
so, hab jetzt herausgefunden, wie man zur laufzeit arrays mit einer beliebigen größe erstellt, zB
string *pallezeichen = 0;
pallezeichen = new string[Zeichenanzahl];
durch "new" wird speicher auf dem heap angefordert, wo man die größen dann nach belieben festlegen kann!
ich habe jetzt aber noch das problem, wenn ich mit streams arbeite, dass ich in der abgespeicherten datei nur die speicheradresse habe und füge ich in die zeile
neuedatei << pallezeichen;
ein " * " vor "pallezeichen" (wie man das bei normalen zeigern macht, um auf den speicherinhalt zugreifen zu können), kann ich es nicht mehr kompilieren...
string *pallezeichen = 0;
pallezeichen = new string[Zeichenanzahl];
durch "new" wird speicher auf dem heap angefordert, wo man die größen dann nach belieben festlegen kann!
ich habe jetzt aber noch das problem, wenn ich mit streams arbeite, dass ich in der abgespeicherten datei nur die speicheradresse habe und füge ich in die zeile
neuedatei << pallezeichen;
ein " * " vor "pallezeichen" (wie man das bei normalen zeigern macht, um auf den speicherinhalt zugreifen zu können), kann ich es nicht mehr kompilieren...
'&' funktioniert nicht, aber eigentlich müsste '*' funktionieren. jedoch zeigt der compiler einen konvertierungsfehler (C2679) an. ich habe mir das auch schon durchgelesen, weiß aber nicht, was ich an meinem code verbessern soll. die betroffene stelle des codes ist:
neuedatei << *pallezeichen;
wobei 'neuedatei' ein stream ist
neuedatei << *pallezeichen;
wobei 'neuedatei' ein stream ist
Logge dich ein um einen Beitrag zu schreiben.