Forum: PC-Programmierung Datei in ein C-programm einlesen


von Reinhard L. (leiti7)


Angehängte Dateien:

Lesenswert?

hallo leute....
habe da ein problem und ich hoffe einer von euch kann mir weiter helfen.

muss ein programm schreiben dass die verschiedenen messdaten aus der 
angehängen datei liest und weiter verarbeitet. ich würde jede zahl 
einzeln aus dem dokument benötigen.

kann mir da jemand von euch helfen wie man sowas in c programmiert?

danke im voraus und lg

leiti7

von Klaus der 3. (Gast)


Lesenswert?

Ich würde die Datei einfach mit fopen öffnen, dann Zeilenweise einlesen 
und dann nur nach den Stichworten Parsen.
Ist mit Sicherheit die quick and dirty Lösung, müsste man aber schnell 
zusammengestrickt haben.

Bei so wenig Begriffen ist das ja schnell gemacht.


Grüße

von Reinhard L. (leiti7)


Lesenswert?

könntest du mir dazu einen beispiel-code schicken?
damit ich mir was vorsellen könnte darunter.

von (Ein) (Gast)


Lesenswert?

Kleiner Tipp: wenn du Funktionen wie atof(), sscanf() oder so dafür 
nimmst, achte auf die LOCALE. Manche brauchen einen Punkt, andere ein 
Komma (3,1415 vs. 3.1415).

von Karl H. (kbuchegg)


Lesenswert?

Reinhard Leitgeb schrieb:
> könntest du mir dazu einen beispiel-code schicken?
> damit ich mir was vorsellen könnte darunter.

Du solltest dir ganz dringend ein C-Buch besorgen.

Zum Thema Dateien und Dateien einlesen gibt es dort ein Kapitel. Und 
dieses Kapitel ist mit Sicherheit mehr als 15 Seiten lang, weil es dazu 
eine Menge zu sagen und zu lernen gibt.

Du erwartest doch hoffentlich nicht, dass du diese >15 Seiten hier durch 
1 oder 2 Beispiele abkürzen kannst?
1
  FILE* inFile;
2
  char  Line[120];
3
4
5
  inFile = fopen( fileName, .... );
6
  if( !inFile ) {
7
    printf( "konnte Datei %s nicht öffnen!\n", fileName );
8
    return;
9
  }
10
11
  while( fgets( inFile, Line, sizeof( Line ) ) {
12
     ... die gelesene Zeile bearbeiten
13
  }
14
15
  if( !feof( inFile ) ) {
16
    printf( "Fehler beim Lesen\n" );
17
  }
18
19
  fclose( inFile );

nur so als Skizze (weil die Sache mit EOF gerne falsch gemacht wird. 
Auch in Büchern). Die Details findest du überall in jedem C-Buch.

von http://www.mikrocontroller.net/topic/203153#new (Gast)


Lesenswert?


von Reinhard L. (leiti7)


Lesenswert?

nein das erwarte ich natürlich nicht.

hatte mir nur erhofft dass es zu diesem spez problem eine einfachere und 
schnellere lösung gibt als diese ganzen seiten durchzuackern wo 
womöglich vieles gar nich benötigt wir un das zu lösen.

von Daniel F. (df311)


Lesenswert?

man fopen
man fscanf
man fputs
man fclose
man strstr
man strncmp
man strncpy
man strtok

von Klaus der 3. (Gast)


Lesenswert?

Ansonsten schau mal z.B. hier:
http://openbook.galileocomputing.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_001.htm

Da hat es Beispiele zum Zeilenweise einlesen (Kapitel 16.16).
Arbeite mal die ganzen Kapitel durch, dann solltest Du es hinbekommen.

Eine kurze Übersicht über das wichtigste gibt es auch hier:
http://de.wikibooks.org/wiki/C-Programmierung:_Dateien

Grüße

von Karl H. (kbuchegg)


Lesenswert?

Reinhard Leitgeb schrieb:
> nein das erwarte ich natürlich nicht.
>
> hatte mir nur erhofft dass es zu diesem spez problem eine einfachere und
> schnellere lösung gibt als diese ganzen seiten durchzuackern wo
> womöglich vieles gar nich benötigt wir un das zu lösen.

Und das in einer Sprache, in der ein einziges falsches Zeichen an der 
richgigen Stelle den Unterschied zwischen Erfolg und Totalniederlage 
ausmachen kann.

In C ist alles wichtig! Wenn du das Kapitel über Files durch hast, bist 
du gerade erst auf Anfängerstatus. Bis zum erfahrenen Filebehandler 
schaffst du es frühestens nach dem 5 oder 6ten Fileparser.

von Volker Z. (vza)


Lesenswert?

Daniel F. schrieb:
> man fopen
> man fscanf
> man fputs
> man fclose
> man strstr
> man strncmp
> man strncpy
> man strtok

oder
msdn fopen
msdn fscanf
msdn fputs
msdn fclose
msdn strstr
msdn strncmp
msdn strncpy
msdn strtok

für windofs

von Kali (Gast)


Lesenswert?

>hatte mir nur erhofft dass es zu diesem spez problem eine einfachere und
>schnellere lösung gibt

Diese Hoffnung beruht auf einer Fehleinschätzung!

In dem Du Dich bei der Betrachtung der Aufgabenstellung nur auf Deine 
beschränkst, meinst Du, das die anzuwendenden Mittel auch einen ebenso 
kleinen Teil der verfügbaren ausmachen.

Tatsächlich aber wirst Du, mit einigen Ausnahmen, alle Möglichkeiten 
benutzen müssen, die in diesem Zusammehang in Frage kommen. Denn diese 
sind bei allen gleichartigen Aufgabenstellungen im Sinne von "Einlesen 
von Dateien" nötig. Die wenigen Ausnahmen beziehen sich auf Spezialfälle 
die z.B. Strings, die etwa eine Fliesskommazahl anstelle einer 
Integerzahl darstellen, betreffen.

Es ist also sowohl für uns als auch für Dich wesentlich ökonomischer 
diese 15 Seiten zu lesen als uns jetzt heraussuchen zu lassen was auf 
Dich zutrifft und Dir das zu erklären, weil das geschätzt mehr als 2 
Drittel der Notwendigkeiten betrifft die überhaupt in dem Zusammenhang 
auftreten.

Karl Heinz hat Dir mit seinem Codeausschnitt wahrscheinlich schon 
mindestens ein Drittel vorweggenommen. Das hat aber den Nachteil, das Du 
das wahrscheinlich nur abschreibst, nicht verstehst, und beim ersten 
Sonderfall nicht in der Lage bist zu erkennen, was daran zu generisch 
ist.

Also, mach Dir die Mühe und erspare Dir und uns die zweite, dritte und 
vierte Frage.

von Karl H. (kbuchegg)


Lesenswert?

Kali schrieb:

> Tatsächlich aber wirst Du, mit einigen Ausnahmen, alle Möglichkeiten
> benutzen müssen, die in diesem Zusammehang in Frage kommen. Denn diese
> sind bei allen gleichartigen Aufgabenstellungen im Sinne von "Einlesen
> von Dateien" nötig.

genau.
Denn jetzt gehts ja weiter. Aus dem gelesenen String müssen die Teile 
extrahiert werden. Das wiederrum ist aber klassische Stringverarbeitung. 
Zahlen sind damit textuell extrahiert und müssen auf numerische Form 
konvertiert werden. Da springen jetzt wieder die Kentnisse über 
Konvertierfunktionen hervor. Die Daten müssen irgendwo abgespeichert 
werden - das klassische Fach der Datenstrukturen tut sich auf. Seien es 
Listen oder Bäume oder dynamisch wachsende Arrays oder Kombinationen von 
allem: Verwaltung von dynamischen Datenstrukturen sollte man schon intus 
haben.

In der Programmierung greifen nun mal die Dinge ineinander. Die 
Mächtigkeit einer Programmiersprache beruht nicht darauf, dass es für 
alles und jedes einen Befehl gibt und man nur diesen Befehl kennen muss. 
Ansonsten wäre ein Schachprogramm nämlich einfach

int main()
{
  play( "chess", 0.8 );
}

fertig! Aber so spielt es nun mal nicht im Leben. Eine 
Programmiersprache ist wie Ur-Lego: Viele einzelne einfache Bausteine, 
deren Zusammbau dann erst die Burg ergibt.

Ich vergleiche Programmieren gerne mit Schachspielen. Es hat keinen Sinn 
erst mal 2 Wochen lang die mögliche Bewegung eines Bauern oder der 
Königin zu studieren. Und bei Bedarf dann anzufragen, wie sich denn ein 
Turm bewegen kann. Schachspiel beginnt damit, dass man alle möglichen 
Figurenbewegungen kennt. Und erst dann, wenn man die alle kennt, kann 
man anfangen sinnvoll Schach zu spielen. Selbst wenn man in den ersten 
Partien keine Rochade braucht.

Und genau aus dem Grund sind alle Versuche derer die glauben, sie 
könnten in einem Forum mal schnell abfragen, wie man Files einliest, 
oder Datenstrukturen aufbaut zum Scheitern verurteilt. Genauso wie ein 
Handwerker muss man sein Handwerkszeug kennen, wenn man professionell 
arbeiten möchte. Und zwar bis ins Detail. Alles andere ist Pfusch.

von Reinhard L. (leiti7)


Lesenswert?

Danke leute. bin inzwischen schon beim durchlesen dieses kapitels und 
werde es hoffentlich alleine schaffen.

sollten trotzdem noch vereinzelte fragen aftauchen hoffe ich das ich 
mich weiterhin an ech wenden kann.

mfg

von Kali (Gast)


Lesenswert?

Insofern haben die "Methusalems" unter den Programmierern einen 
unschätzbaren Vorteil. Als die angefangen haben, gingen Artikel über die 
Substruktur von Prozessoren durch die (wenig umfangreiche) Literatur die 
man damals verschlungen hat um zu verstehen "wie das eigentlich 
funktioniert". Man hat (wenigstens im Geist) TTL-Gräber gebaut um eine 
ALU zu erhalten. Es gab keine Multiplikationsbefehle, keine Division 
etc. Das hatte als Nebeneffekt zur Folge, das man mit dem Gedanken, das 
sich das grosse Ganze aus vielen kleinen Einzelheiten zusammensetzt, 
vertraut wurde und keine davon unterschätzt werden darf.

Der damalige Wunschtraum der "Wiederverwendbarkeit" von Code wurde aus 
verschiedenen Gründen geträumt. Der Programmierer wollte nicht jedesmal 
von Null anfangen um sich Zeit und doppelte geistige Arbeit zu sparen. 
Für den Unternehmer war und ist das ein Mittel um Kapital- und 
Arbeitszeiteinsatz zu sparen. Die Library als Produktionsmittel, das 
menschliche Arbeit überflüssig macht.
Das ist inzwischen, mit dem Zwischenschritt, das in fertigem Code 
enthaltene Verständnis zu vernachlässigen, zu der Haltung mutiert, ohne 
Verständnis Code zusammenzukopieren und bei Problemen die Methusalems zu 
fragen. (Naja. Ein wenig überspitzt aber es enthält einen wahren Kern).

So: Join us. Be a methusalem. Read. Think. Apply.

von Kali (Gast)


Lesenswert?

>sollten trotzdem noch vereinzelte fragen aftauchen hoffe ich das ich
>mich weiterhin an ech wenden kann.

Gerne. Das ist uns die liebste Hilfe: Helfen zu verstehen.

von Karl H. (kbuchegg)


Lesenswert?

Reinhard Leitgeb schrieb:

> sollten trotzdem noch vereinzelte fragen aftauchen hoffe ich das ich
> mich weiterhin an ech wenden kann.

Selbstverständlich.
Wenn du Detailfragen hast, immer her damit. Wenn dir was unklar ist, 
immer her damit.

Aber so Rundumschlagfragen ala: Bitte erklärt mir die Welt!
Die sind denkbar ungeeignet für ein Forum.

von Reinhard L. (leiti7)


Lesenswert?

hätte schnell mal ne frage:

was ist der unterschied zwischen char und char* ?

von Kali (Gast)


Lesenswert?

Ich schreib nix mehr. Kopfschmerzen. :-)

Naja. Das ist so ein Kapitel, das die C-Bücher in einem eigenen Kapitel 
behandeln.

Aber kurz: "*" meint, das die Variable auf eine andere Variable "zeigt", 
also deren Speicheradresse angibt. Der Gegensatz ist eine Variable die 
ein Datum aus dem Anwendungsgebiet der Software enthält, wie eine 
Geldsumme, oder ein Zeichen aus einem Text.

von Peter (Gast)


Lesenswert?

>hätte schnell mal ne frage:
>was ist der unterschied zwischen char und char* ?

@Reinhard Leitgeb  ==> Besorge Dir endlich ein C-Buch!

@alle andern: Ja nicht beantworten, sonst lernt Reinhard nie, auf 
eingenen Füssen zu stehen!!!

von Reinhard L. (leiti7)


Lesenswert?

okey danke... bekomm auch schon kopfschmerzen.... ;)

von Random .. (thorstendb) Benutzerseite


Lesenswert?

Ich würd das stumpf in nen buffer einlesen (ka, 1MB), dann 
characterweise parsen, nach den "Schlüssenwörtern" suchen.

Irgendwann kommt das letzte Schlüsselwort, dann nur noch zahlen.

Mit '\n' als Sync dann die Werte den Schlüsseln zuordnen.

man kann auch das ganze zeilenweise einlesen, und dann die einzelnen 
zahlen mit scanf rauspulen.

von Karl H. (kbuchegg)


Lesenswert?

Peter schrieb:
>>hätte schnell mal ne frage:
>>was ist der unterschied zwischen char und char* ?
>
> @Reinhard Leitgeb  ==> Besorge Dir endlich ein C-Buch!
>
> @alle andern: Ja nicht beantworten, sonst lernt Reinhard nie, auf
> eingenen Füssen zu stehen!!!

@RL
Das ist genau das, was ich etwas weiter oben gedacht hatte anzusprechen:
Es hängt alles mit allem zusammen und nichts kann für sich alleine 
betrachtet werden. Wenn dir die Grundlagen in arithmetischen Gleichungen 
fehlen, dann wirst du bei Differentialrechnung auf die Schnauze fallen. 
Egal wie gut dein Lehrer in Differentialrechnung ist. Der wird dir 
nämlich sagen: Besorg dir ein Mathebuch und erarbeite dir erst mal die 
Grundlagen.

Alternativ: Es gibt Menschen (einige davon sind sogar hier im Forum 
aktiv), die verdienen ihren Lebensunterhalt damit, das alles und noch 
viel mehr aus dem FF zu beherrschen. Die beherrschen das nicht, weil sie 
es mit der Muttermilch aufgesogen haben, sondern weil sie vor vielen 
Jahren genau das gemacht haben, was dir fehlt: Sie haben sich hingesetzt 
und haben das mit Hilfe von Literatur gelernt. Das ist nicht schnell 
gegangen. Es dauert ca. 1 Jahr, bis sich ein frischgefangener Neuling 
soweit entwickelt hat, dass ich ihn unter weiterer Aufsicht ins 
Produktionscoding übernehmen kann. Und im Selbststudium dauert es dann 
noch mal länger. Aber schnell, schnell ... geht da gar nichts.

von Kali (Gast)


Lesenswert?

>erarbeite dir erst mal die Grundlagen.

Genau. Die Taktik mittendrin irgendwas komplexeres anzufangen hat 
nämlich den Nachteil, das Du das komplexe Thema nicht richtig verstehst 
und die Grundlagen immer noch nicht verstanden hast.
Du hast also schätzungsweise die doppelte Arbeit mit dem komplexen 
Thema, weil Du 1. das komplexe Thema nochmal lesen musst und 2. die 
Missverständnisse die sich beim ersten lesen ergeben haben erstmal 
erkennen und wieder ausräumen musst.

von Klaus W. (mfgkw)


Lesenswert?

Wenn es nur mal eben ein einziges Programm sein soll, muß es ja nicht in 
C geschrieben sein (oder ist das vorgegeben?).
Das zu lernen, lohnt nur, wenn man es öfter braucht.

Das hängt aber auch davon ab, was mit "verarbeiten" gemeint ist...

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Reinhard Leitgeb schrieb:
> was ist der unterschied zwischen char und char* ?

Wenn Du nicht in der Lage bist, diesen Unterschied selbst zu 
recherchieren, bist Du es auch nicht wert, die Programmieraufgabe zu 
bestehen oder dabei eine ordentliche Note bzw. Bewertung zu erhalten.

von agp (Gast)


Lesenswert?

Bezüglich der Frage

"was ist der unterschied zwischen char und char* ?"

wäre vielleicht mal ein Blick hierein recht aufschlussreich (besonders 
die nächste Seite)

http://books.google.de/books?id=88_-9d3P0wQC&pg=PA91&lpg=PP1

und überhaupt kann ich nur empfehlen sich das Büchlein anzuschaffen. Es 
hat einen guten Ruf und ist sein Geld wert.

(sieht im Buch auch besser aus als auf der eingeschränkt lesbaren 
googleseite ;))

von Karl H. (kbuchegg)


Lesenswert?

agp schrieb:

> wäre vielleicht mal ein Blick hierein recht aufschlussreich (besonders
> die nächste Seite)
>
> http://books.google.de/books?id=88_-9d3P0wQC&pg=PA91&lpg=PP1
>
> und überhaupt kann ich nur empfehlen sich das Büchlein anzuschaffen. Es
> hat einen guten Ruf und ist sein Geld wert.

Jup.
Kernighan & Ritchie, oder kurz K&R, ist die Bibel unter den C-Büchern. 
Für einen ernsthaften C-Programmierer ein absolutes Muss.

Ich empfehle normalerweise auch jedem, bei derartigen Unterlagen nicht 
zu knausern und sich ein richtiges Buch zu kaufen. Es braucht keinen 
Strom, was abends beim Schmökern im Bett wichtig ist. Es kann 
aufgeschlagen neben dem Monitor liegen und ist so immer zur Hand, wenn 
man was nachschlagen muss. Man kann mit Postit oder mit Bleistift 
Notizen im Buch unterbringen und so das Buch weiter pimpen. Mit 
eingelegten Blättern kann man einen Ultra-Pimp machen, indem man sich 
Algorithmen oder Programme zu den entsrprechenden Kapiteln 'dazuheftet'. 
Und mit der Zeit kennt man auch die Abfolge der einzelnen Kapitel 
auswendig und ist mit wenigen Handgriffen bei der Stelle die man sucht 
um dort vergessene Details nachzulesen. Und zwar schneller als dein 
PDF-Reader auch nur hochstartet und du den Suchbegriff eingegeben hast.

Einzige Nachteil: Nach ein paar Jahren ist das Buch durch den häufigen 
Gebrauch verschlissen oder zumindest unansehnlich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.