Datei zeilenweise einlesen
-
Hi
Jo suche schon lange ne möglichkeit eine Zeile einer Datei irgednwie zeilenweise einzulsen? Irgendwie scheint es da keine eindache Funktion für zu geben. oder keiner kennt sie
Das erst mal das erste Problem
Wie kann ich diese Datei zerschnippel und immer an einem bestimmten zeichen trennen und in ein array packen?
Beispiel: Hallo*.*du*.*da
soll in ein array gepackt werden und zwar jedes einzeln
-
Zu 1) Du kannst die Datei mit der CStdioFile und ReadString Zeilenweise lesen.
zu 2) Den String auseinander schneiden kannst du mit Left, Right, Mid der CString Klasse
-
hmmm? die funktion sind mit bekannt? aber auf zweilenweise bin ich da irgednwie noch nicht gestoßen? Kleines Codeschnippelchin?
-
ReadString liest bis zum nächsten \n ein.
Man könnte es auch ReadLine nennen, das würde die Funktion besser beschreiben.Such doch mal nach *ReadString* da gibt es bestimmt was.
-
hier ein codeausschnitt aus meinem proggie, das liesst die zeilen schrittweise und nach zeichen aus, und dazu noch mit if bedingungen
if (CReadDBDlg::m_initialisierung == FALSE)
{ int lo;
int eing=0;
while (eing<=5000) //5000 Datensätze
{
lo=0;
while (lo<=20)
{
//nr[eing].be[lo]=' ';
nr[eing].gm[lo]=' ';
nr[eing].ro[lo]=' ';
nr[eing].st[lo]=' ';
nr[eing].yy[lo]=' ';
nr[eing].xx[lo]=' ';
nr[eing].rz[lo]=' ';
lo++;
}eing++;
}
CReadDBDlg::m_initialisierung = TRUE;}//m_rep="c://koord655.rep";
char text[502];//eingelesene zeile wird hier gespeichert
text[500]=' ';
int ll=0; //gibt position in nr.be
int schon=0; //schonmal alle ------- gehabt ?
int zeile=0; // gibt an, wieviele zeilen durchlaufen wurden
int i=0; //gibt position der zeile wieder
int zeilenbedingung=1; //ist ächte zeile ein datensatz?
int temp=0; //zählt ob 60 '-' hintereinander kommen
int start=0;char kk;kk=65; //start=startposition zum eintrage in lise eines wertes,kk zur überprüfung, geört nicht zum programm
m_typ=0; //welcher typ wird gerade gelesen
m_wert=0; //gibt zeile nr[].be eine nummer in der fertigen tabelle
int werft=0;
while (i<=498) //alle text[200] auf ASCII 0 Setzten
{
text[i]=' ';
i++;
}std::ifstream in("c://koord655.rep"); //Pfadangabe der rep datei
while (zeile<=100) //für insgesam 100 zeilen das testproggie
{in.getline(text,200);zeile++; //die ersten 200 zeichen auf der 1. zeile auslesen
i=0;while (i<=200) //Zeile auf 200 Zeichen länge ablesen
{
if (text[i]==45 || schon==1) //in den 200 zeichen nach ASCII '-' suchen
{
temp++; //wenn '-' dann temp 1 hinzufügen, ansonsten Null setzen
if (text[i+1]!=45 && temp<=60){temp=0;}if (temp>=59) //wenn '-' mehr als 59 mal vorgekommen ist
{while (zeilenbedingung==1) //100 leerzeichen
{int bb=4;
zeilenbedingung=0;
while (bb<=101 )
{
if (text[bb]!=' ')
{zeilenbedingung=1; }
bb++;
}i=0;
while (i<300) //alle text[200] auf ASCII 0 Setzten
{
text[i]=' ';
i++;
}
i=0;
in.getline(text,200);zeile++; //nächste zeile einlesen
while (i<=200)
{
if (text[i] != ' ') //wenn Zeichen auf der Zeile Nicht leer ist
{
ll=0;
int star=i; //variable merkt sich die anfangs i position
int t=1; //Laufvariablewhile (text[i]!=' ')
{
i++;
} //i=endeposition
i--;m_typ++;
while (star <= (i)) //solange startvariable kleiner ist wird der Bichstabe hinzugefügt
{char lol;
lol=text[star];
if (m_typ==6)
{nr[werft].gm[ll]=lol;}
if (m_typ==5)
{nr[werft].st[ll]=lol;}
if (m_typ==4)
{nr[werft].ro[ll]=lol;}
if (m_typ==3)
{nr[werft].yy[ll]=lol;}
if (m_typ==2)
{nr[werft].xx[ll]=lol;}
if (m_typ==1)
{nr[werft].rz[ll]=lol;}star++;
//kk=66;
ll++;;
schon=1;}
if (m_typ==6) {werft++;m_typ=0;}
}
i++;//m_kontrolle=CReadDBDlg::nr[2].be;
} }}
}
i++;
}
}
-
Hilfe ...
-
@Admiralis:
So ein Unsinn!
Wir sind hier im MFC-Forum, was soll da dein Code mit STL? Dazu noch ohne Code-Tags oder Erklärung.
@Fragesteller: Wie bereits erwähnt: Öffne die Datei mit CStdioFile und lese mit ReadString aus ihr.
Weiteres sagt dir die MSDN.