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
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
könntest du mir dazu einen beispiel-code schicken? damit ich mir was vorsellen könnte darunter.
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).
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.
Reinhard Leitgeb schrieb: > muss ein programm schreiben dass ... Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?" http://www.amazon.de/Programming-Language-Prentice-Hall-Software/dp/0131103628
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.
man fopen man fscanf man fputs man fclose man strstr man strncmp man strncpy man strtok
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
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.
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
>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.
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.
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
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.
>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.
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.
hätte schnell mal ne frage: was ist der unterschied zwischen char und char* ?
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.
>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!!!
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.
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.
>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.
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...
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.
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 ;))
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.