Archiv verlassen und diese Seite im Standarddesign anzeigen : datei zeilenweise auslesen
Hallo gibt es eine Funktion, mit der man eine Datei zeilenweise auslesen kann, da es für mein Programm unpraktisch ist einzelne Zeichen einzulesen.
Danke
tkortkamp
10-01-2003, 10:18
Das funktioniert mit fgets.
http://www.pronix.de/C/standard_C/ckurs/ckurs90.html
c ya,
Tobias
ja funktioniert, aber da hört er nach der ersten Zeile auf, ich habe es so versucht:
FILE *datei;
char c[255];
char zeile2[255];
if((datei=fopen(name, "r"))==NULL)
printf("\nDatei nicht vorhanden...");
while(fgets(c, sizeof(c), datei)){
}
fclose(datei);
printf("%s", c);
kann mir vielleicht jemand sagen, warum?
danke
tkortkamp
10-01-2003, 11:38
Du machst ja gar nichts weiter mit der Zeile...
In der while-Schleife wird doch der Inhalt von c jedesmal wieder mit der nächsten Zeile überschrieben.
Das hier gibt z.B. die gesamte Datei aus.
while(fgets(c, sizeof(c), datei))
{
printf("%s", c);
}
c ya,
Tobias
gut das klappt, kannst du mir auch sagen, wie ich das Ende jeder Zeile ermitteln kann, damit ich sie dann einzeln bearbeiten kann?
danke
tkortkamp
10-01-2003, 11:46
Mit strlen kannst du die Länge von Strings ermitteln.
=> Länge der Zeile + \n (Newline)
c ya,
Tobias
ContainerDriver
10-01-2003, 11:46
Ich weiß jetzt nicht welche Sprache du verwendest, da ich da aber was von C gesehen hab, verwendest du ja vielleicht auch C++.
Also in C++ geht das so:
//Start
#include <iostream.h>
#include <fstream.h>
//schnipp
ifstream reading(file);
char line[255];
if (reading.good())
{
while (!reading.eof())
{
reading.getline (line,255);
}
}
else
{
cout << "Datei " << file << " nicht gefunden." << endl;
}
//schnapp
//Ende
Die Variable wird immer wieder überschrieben, d. h. wenn du damit irgendetwas machen willst, musst du ein zweidemensionales Feld anlegen oder die Funktion, die mit "line" etwas machen soll, nach reading.getline (..) aufrufen.
Ich hoffe ich konnte dir helfen.
MFG Florian
nein ich verwende kein c++, deshalb hast du ja auch was von c gelesen und nicht von c++.
trotzdem danke.
Also die Datei test.txt so:
Nico;Knolde;16
Herbert;Gröhnemeier;50
Captain;Balu;30
und er bearbeitet aber immer nur die letzte Zeile meines Programmes.
Das Programm sieht jetzt so aus(bisschen viel auskommentiert, das sind alte Sachen, falls ich sie noch mal verwende):
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
struct namen{
char mvorname[255];
char mnachname[255];
int malter;
int Kundennummer;
char Haustier[255];
};
struct namen angab[2];
int zeige(){
int i=0;
while(i<2){
printf("\n%s %s %d", angab[i].mvorname, angab[i].mnachname, angab[i].malter);
i++;
}
}
int zeile_analyse(char *zeile, char *feld, char trenn){
int i=0;
while(zeile[i]!=trenn){
i++;
if(zeile[i]=='\0')
break;
if(i>255){
i=0;
break;
}
}
if(i==0){
feld=zeile;
zeile="";
}
else{
memcpy(feld, zeile, i);
memcpy(zeile, zeile +i +1, 255 -i);
feld[i]='\0';
}
if(strlen(zeile)==0)
return 0;
else
return 1;
}
int schreibe(char *zeile){
int j;
int i=0;
char feld[255];
char trenn=';';
while(strlen(zeile)!=0){
j=zeile_analyse(zeile, feld, trenn);
i++;
if(j==0)
break;
switch(i){
case 1:
strcpy(angab[0].mvorname, feld);
break;
case 2:
strcpy(angab[0].mnachname, feld);
break;
case 3:
angab[0].malter=atoi(feld);
break;
}
}
//printf("\n%s %s %d", angab[0].mvorname, angab[0].mnachname, angab[0].malter);
return 0;
}
int scanne(char *name){
FILE *datei;
char c[255];
//int i;
//char zeile2[255];
if((datei=fopen(name, "r"))==NULL)
printf("\nDatei nicht vorhanden...");
while(fgets(c, sizeof(c), datei)){
printf("%s", c);
schreibe(c);
//i++;
//c[i] = fgetc(datei);
}
//c[i]='\0';
fclose(datei);
// printf("%s", c);
//schreibe(c);
return 0;
}
int main(void){
//char record[255];
//char zeile[255];
char name[255];
sprintf(name, "test.txt");
scanne(name);
// printf("\n%s %s %d", angab[0].mvorname, angab[0].mnachname, angab[0].malter);
zeige();
//sprintf(zeile, "Nico;Knolde;16");
//schreibe(zeile, record);
return 0;
}
Falss mir jemand sagen kann, woran das liegt, wäre ich sehr dankbar.
danke
EDIT by anda_skoa: code tags
anda_skoa
10-01-2003, 12:03
Original geschrieben von florian hanisch
Ich weiß jetzt nicht welche Sprache du verwendest, da ich da aber was von C gesehen hab, verwendest du ja vielleicht auch C++.
Also in C++ geht das so:
//Start
#include <iostream.h>
#include <fstream.h>
//schnipp
ifstream reading(file);
char line[255];
Naja, fast :)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
Und line als
string line;
Lesen
getline(reading, line); // ohne Längeneinschränkung, weil Typ string
Ciao,
_
halllooooooooo, ich will doch gar kein c++, sondern c.
danke
tkortkamp
10-01-2003, 12:26
anda_skoa hat doch bloss florian hanisch verbessert...
Kannst du deinen Code eigentlich mal in [ code] [/ code] Tags packen und einrücken. So wie der jetzt ausschaut blickt man da nur mit viel Mühe durch.
c ya,
Tobias
anda_skoa
10-01-2003, 13:43
Original geschrieben von tkortkamp
anda_skoa hat doch bloss florian hanisch verbessert...
Genau :)
Kannst du deinen Code eigentlich mal in [ code] [/ code] Tags packen und einrücken. So wie der jetzt ausschaut blickt man da nur mit viel Mühe durch.
Ich hab das mal gemacht, aber besser avuton macht es in Zukunft selbst.
Ciao,
_
Ja kann ich, ich wusste davor nur nicht, wie es geht.
gruß avuton:-)
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.