Hilfe bei feof gesucht
-
Hallo,
ich hab folgenden Text in einer txt-Datei stehen:
Cicc 06 Ciccarelli,F.D., Doerks,T., v. Mering, Ch., Creevey,Ch.J., Snel,B., Bork,P. (2006): Toward Automatic Reconstruction of a Highly Resolved Tree of Life. Science 311: 1283-1287
den will ich nun auseinanderdrieseln und umstrukturiert in ein neues Textfile schreiben. Das geht auch soweit, aber er findet das endof File nicht und macht dann nur noch Mist. Was mach ich da falsch. Anbei der Code.
void CKonvertRaffDlg::OnBnClickedOk() { FILE *pFileread; FILE *pFilewrite; CString CShelp, CShelp1; char * pchelp; char * pchelp1; int iAnzZeichen = 0; int iAnzZproZ = 0; int inC = 0; fpos_t pos; // Namen für neues File inc. Pfad ermitteln UpdateData(true); CSnewFile = m_CSnewFile; setlocale(LC_TIME,"German"); if(m_CSopenFile.GetLength()>3) { if(m_CSnewFile.GetLength() > 0) { // altes File öffnen pFileread = fopen(m_CSopenFile,"r"); if(pFileread) { do { fgetpos (pFileread, &pos); if (pos > 0) { pos +=3; fsetpos(pFileread, &pos); } iAnzZeichen= 0; do { iAnzZeichen++; inC = fgetc(pFileread); }while((inC != 0x0A) && (inC != -1)); iAnzZproZ = iAnzZeichen; // Daten Suchen und umstrukturieren CShelp = "%0 Journal Article / Abstract \n"; // Oldnumber fgetpos(pFileread,&pos); pos -= (iAnzZproZ-1); fsetpos(pFileread, &pos); iAnzZeichen = 0; do { iAnzZeichen++; inC = fgetc(pFileread); }while((inC != 0x09) && (inC != -1)); pchelp1 = (char*) malloc(iAnzZeichen); fgetpos(pFileread,&pos); pos = pos-iAnzZeichen; fsetpos(pFileread, &pos); fgets(pchelp1,iAnzZeichen,pFileread); CShelp = CShelp + "%1 "; CShelp1.Format("%s\n",pchelp1); CShelp = CShelp + CShelp1+"%A "; free(pchelp1); // Autoren // müssen noch weiter auseinander genommen werden fgetpos(pFileread,&pos); pos = pos+1; fsetpos(pFileread, &pos); iAnzZeichen = 0; do { iAnzZeichen++; inC = fgetc(pFileread); }while((inC != '(') && (inC != -1)); pchelp1 = (char*) malloc(iAnzZeichen); fgetpos(pFileread,&pos); pos = (pos-iAnzZeichen); fsetpos(pFileread, &pos); fgets(pchelp1,iAnzZeichen-1,pFileread); CShelp1.Format("%s\n",pchelp1); CShelp = CShelp + CShelp1 + "%D "; free(pchelp1); // Jahreszahl pchelp1 = (char*) malloc(5); fgetpos(pFileread,&pos); pos = pos+2; fsetpos(pFileread, &pos); fgets(pchelp1,5,pFileread); CShelp1.Format("%s\n",pchelp1); CShelp = CShelp + CShelp1 + "%T "; free(pchelp1); // Title fgetpos(pFileread,&pos); pos = pos+3; fsetpos(pFileread, &pos); iAnzZeichen = 0; do { iAnzZeichen++; inC = fgetc(pFileread); }while((inC != '.') && (inC != -1)); pchelp1 = (char*) malloc(iAnzZeichen); fgetpos(pFileread,&pos); pos = pos-iAnzZeichen; fsetpos(pFileread, &pos); fgets(pchelp1,iAnzZeichen,pFileread); CShelp1.Format("%s\n",pchelp1); CShelp = CShelp + CShelp1 + "%J "; free(pchelp1); // Journal fgetpos(pFileread,&pos); pos = pos+2; fsetpos(pFileread, &pos); iAnzZeichen = 0; do { iAnzZeichen++; inC = fgetc(pFileread); }while((inC != '1')&& (inC !='2')&& (inC !='3')&& (inC !='4')&& (inC !='5')&& (inC !='6') && (inC !='7')&& (inC !='8')&& (inC !='9')&& (inC !='0') && (inC != -1)); pchelp1 = (char*) malloc(iAnzZeichen); fgetpos(pFileread,&pos); pos = pos-iAnzZeichen; fsetpos(pFileread, &pos); fgets(pchelp1,iAnzZeichen,pFileread); CShelp1.Format("%s\n",pchelp1); CShelp = CShelp + CShelp1 + "%V "; free(pchelp1); // Volume fgetpos(pFileread,&pos); pos = pos+1; fsetpos(pFileread, &pos); iAnzZeichen = 0; do { iAnzZeichen++; inC = fgetc(pFileread); }while((inC !=':' && inC !='(') && (inC != -1)); if(inC == '(') { pchelp1 = (char*) malloc(iAnzZeichen); fgetpos(pFileread,&pos); pos = pos-iAnzZeichen; fsetpos(pFileread, &pos); fgets(pchelp1,iAnzZeichen,pFileread); CShelp1.Format("%s\n",pchelp1); CShelp = CShelp + CShelp1 + "%N "; free(pchelp1); // Issue fgetpos(pFileread,&pos); pos = pos+1; fsetpos(pFileread, &pos); iAnzZeichen = 0; do { iAnzZeichen++; inC = fgetc(pFileread); }while((inC !=')') && (inC != -1)); pchelp1 = (char*) malloc(iAnzZeichen); fgetpos(pFileread,&pos); pos = pos-iAnzZeichen; fsetpos(pFileread, &pos); fgets(pchelp1,iAnzZeichen,pFileread); CShelp1.Format("%s\n",pchelp1); CShelp = CShelp + CShelp1 + "%P "; free(pchelp1); } else { if(inC == ':') { iAnzZeichen++; pchelp1 = (char*) malloc(iAnzZeichen); fgetpos(pFileread,&pos); pos = pos-iAnzZeichen; fsetpos(pFileread, &pos); fgets(pchelp1,iAnzZeichen,pFileread); CShelp1.Format("%s\n",pchelp1); CShelp = CShelp + CShelp1 + "%P "; free(pchelp1); } } // Pages fgetpos(pFileread,&pos); pos = pos+3; fsetpos(pFileread, &pos); iAnzZeichen = 0; do { iAnzZeichen++; inC = fgetc(pFileread); }while((inC != 0x0A) && (inC != -1)); pchelp1 = (char*) malloc(iAnzZeichen+1); fgetpos(pFileread,&pos); pos = pos-iAnzZeichen; fsetpos(pFileread, &pos); fgets(pchelp1,iAnzZeichen+1,pFileread); CShelp1.Format("%s\n",pchelp1); CShelp = CShelp + CShelp1; free(pchelp1); // Entry Date time_t ttzeit; time(&ttzeit); char chzeit_str[100]; strftime(chzeit_str,99,"%d.%m.%Y",localtime(&ttzeit)); CShelp1.Format("%s\n\r\n",chzeit_str); CShelp = CShelp +"%\\ "+ CShelp1; // in neues File Schreiben pFilewrite = fopen(CSnewFile,"a+"); fprintf(pFilewrite,"%s",CShelp); fclose(pFilewrite); iAnzZeichen = 0; //free(pchelp); }while(!feof(pFileread)); fclose(pFileread); AfxMessageBox("Fertig"); OnBnClickedCancel(); } } else { AfxMessageBox("kein Name für neue Datei!"); } } else { AfxMessageBox("keine TXT-Datei ausgewählt!"); } //OnOK(); }
P.S. Die orginale Textdatei hat noch viel mehr Einträge von der gleichen Art, aber da geht es eben auch nicht. deshalb die Kurzvariante für das einlesen File.
Danke schon mal für die Hilfe.
-
Erstens: Das ist die "Kurz"Variante?
Wie mag da erst die vollständige Funktion aussehen?
Zweitens: Wenn du schon C++ verwendest, solltest du auch fstream's (oder CFile) für die Dateiverwaltung verwenden.
-
Mit Kurzvariante meinte ich, das einzulesende File. Die Funkion ist vollständig, weil das Einlesen und Weiterverarbeiten, ja dann immer das selbe ist und ablaufen sollte, bis das endoffile erreicht ist und genau hier liegt das Problem und dafür brauch ich Hilfe. Ich hab schon verschiedene Sachen ausprobiert, aber nichts hilft bei diesem Problem.
-
Hi ela,
schau mal in den Thread mit der Überschrift "Dinge die man in c vermeiden sollte" (oder ähnlich) - der müsste ganz in der Nähe sein. Der hat mir auch gerade geholfen!
-
Danke, ich hab es jetzt so gemacht und es geht.