daten von festplatte filtern
-
vlplayer schrieb:
und zwar sollte es 3 möglichkeiten geben dies zu realisieren. könnt ihr mir helfen?!
Wenn du weißt, dass es 3 Möglichkeiten der Realisierung gibt, dann bedeutet das auch, dass du sie im Prinzip schon kennen musst, sonst könntest du sie schließlich nicht zählen ...
-
FrEEzE2046 schrieb:
vlplayer schrieb:
und zwar sollte es 3 möglichkeiten geben dies zu realisieren. könnt ihr mir helfen?!
Wenn du weißt, dass es 3 Möglichkeiten der Realisierung gibt, dann bedeutet das auch, dass du sie im Prinzip schon kennen musst, sonst könntest du sie schließlich nicht zählen ...
Ich frage mich vor allem, ab wann zwei Möglichkeiten unterschiedlich sind. Sind diese beiden Sachen unterschiedlich?
// Möglichkeit 1: cout << "Hallo Welt" <<endl; // Möglichkeit 2: void output(){cout << "Hallo Welt" <<endl;} //... output();Wohl kaum, denn es sind bloß unterschiedliche Schreibweisen für das gleiche.
Und wenn ich es noch komplizierter mache?
// Möglichkeit 3 string hw = "Hallo Welt\n"; ostream_iterator<char> output(cout); copy(hw.begin(),hw.end(),output);Das schreibt im Prinzip auch nur Zeichen nach cout (mit einer Menge Overhead). Ist das jetzt was anderes als vorher? Falls ja, wo ist die Grenze ab der etwas hinreichend geändert wurde? Wenn nach dem compilieren eine Maschinenanweisung anders ist? Dann kann man viele Fantastilliarden unterschiedliche Programme schreiben die alle intern ein paar unterschiedliche Adressen benutzen.
Falls Möglichkeiten 3 und 1 aber als gleich angesehen werden, ab wann sind dann zwei Möglichkeiten verschieden? Wenn ich printf benutze? Ja, es ist nicht cout, aber printf und cout::<< sind auch nur Funktionen die intern stumpf nach stdout schreiben, also im Sinne der Möglichkeiten 2 und 3 das gleiche tun (mit unterschiedlichem Overhead). Ist das dann unterschiedlich, bloß weil es andere Namen sind? Insofern wären dann aber wiederum alle Programme gleich, die das gleiche tun ("Hallo Welt" nach stdout schicken) und man im Prinzip nur eine einzige Möglichkeit dies zu erreichen. Wäre es ein Unterschied, würde ich inline-Assembler benutzen? Fragen über Fragen...(Und das alles bloß, weil ein Lehrer sich in der Hausaufgabenstellung schlecht ausgedrückt hat)
-
also mal abgesehen von den 3 möglichkeiten die es geben soll .
wie filtere ich denn überhaupt daten von der festplatte .?
Und die tatsache das es 3 möglichkeiten geben soll und ich sie angeblich kennen muss muss ich leider widerlegen da ich 3 möglichkeiten erstellen sollte und es so in der aufgabe stand
-
SeppJ schrieb:
könnt ihr mir helfen?!
Ja und Nein.
Ja, im Allgemeinen kann dir geholfen werden.
Nein, denn dein Text verrät nicht was für Hilfe du benötigst, daher kann dir niemand hilfreich antworten.
Obwohl, eine Hilfe hätte ich doch: http://www.c-plusplus.net/forum/viewtopic-var-t-is-200753.html
Noch dazu.! Wieso sollte ich mich nicht an regeln gehalten habe ?! ich finde sowas absolut unprofessionell von euch ich wende mich an das FORUM um eine Antwort auf meine frage zu bekommen ich verlange keine komplettösung nix . Also immer die Neuen auf die regeln aufmerksam zu machen ist absolut zu unrecht . wenn schon zu klugscheisserisch , dann vielleicht nur antworten zum thema bitte!
-
vlplayer schrieb:
Noch dazu.! Wieso sollte ich mich nicht an regeln gehalten habe ?! ich finde sowas absolut unprofessionell von euch ich wende mich an das FORUM um eine Antwort auf meine frage zu bekommen ich verlange keine komplettösung nix . Also immer die Neuen auf die regeln aufmerksam zu machen ist absolut zu unrecht . wenn schon zu klugscheisserisch , dann vielleicht nur antworten zum thema bitte!
DU willst Hilfe. Also musst DU die nötigen Informationen liefern, damit man dir helfen kann.
-
vlplayer schrieb:
Also immer die Neuen auf die regeln aufmerksam zu machen ist absolut zu unrecht.
Nein, ist es nicht. Für irgendwas sind die Regeln da. Wenn du sie nicht einhältst, wirst du eben darauf hingewiesen. Das ist keinesfalls persönlich zu nehmen.
Dass es genau drei Möglichkeiten geben soll, ist ohne Angabe dieser wirklich keine hilfreiche Information. Das darf man dir ruhig sagen.
Zum Problem: Eine Möglichkeit bestünde darin, mit
std::ifstreamdie Daten einzulesen, in einemstd::vectorabzuspeichern und danach den Filteralgorithmus darüber laufen zu lassen.
-
vlplayer schrieb:
wenn schon zu klugscheisserisch , dann vielleicht nur antworten zum thema bitte!
So erreicht man nix. Vor allem wenn man selber eine Aufgabe bekommen hat und das FORUM bittet sie für einen (wenn auch nur in Teilen) zu lösen. Dabei lässt du alles weg, was von Belang sein sollte.
http://www.cplusplus.com/reference/
Hier ist ne wunderbare "Doku" zu C++. Und weil ich so lieb bin sag ich dir dass du am besten bei den "fstream"-Sachen ansetzt. Das ist zum Lesen/Schreiben von Dateien. Messdaten filtern kannst du dir selber ausdenken. Du bist nämlich der Einzige der weiß wie die Daten aussschauen.Und BTW:
hey, und zwar möchte ich ein programm erstellen das zum Zeitpunkt der Programmerstellung unbekannte Menge von auf Festplatte abgelegten Messwerten filtern soll.
Hast du Ahnung von Programmieren?!?
Du willst ein Programm erstellen, das schon während dem Erstellen Daten von der Festplatte liest und gleich noch filtert?
Das ist der EINZIGE Satz den du uns gegeben hast. Und du wunderst dich über die Antworten?!?
-
das ist der einzige satz den ich gestellt bekommen habe .
-
l'abra d'or schrieb:
hey, und zwar möchte ich ein programm erstellen das zum Zeitpunkt der Programmerstellung unbekannte Menge von auf Festplatte abgelegten Messwerten filtern soll.
Hast du Ahnung von Programmieren?!?
Du willst ein Programm erstellen, das schon während dem Erstellen Daten von der Festplatte liest und gleich noch filtert?
Das ist der EINZIGE Satz den du uns gegeben hast. Und du wunderst dich über die Antworten?!?Ich vermute es ist
[...] das eine (zum Zeitpunkt der Programmerstellung unbekannte) Menge von auf Festplatte abgelegten Messwerten filtern soll.
gemeint.
-
vlplayer schrieb:
hey, und zwar möchte ich ein programm erstellen das zum Zeitpunkt der Programmerstellung unbekannte Menge von auf Festplatte abgelegten Messwerten filtern soll.
und zwar sollte es 3 möglichkeiten geben dies zu realisieren. könnt ihr mir helfen?!Ich tue jetzt mal so, als wäre die Fragestellung vernünftiger Natur. Inwiefern willst du die Daten überhaupt filtern?
Du sagst du möchtest eine unbekannte Menge an Messwerten auf eine unbekannte Art filtern und fragst ob das möglich ist. Ja, durch eine unbekannte Funktion deren Implementation unbekannt ist.
-
vlplayer schrieb:
hey, und zwar möchte ich ein programm erstellen das zum Zeitpunkt der Programmerstellung unbekannte Menge von auf Festplatte abgelegten Messwerten filtern soll.
und zwar sollte es 3 möglichkeiten geben dies zu realisieren. könnt ihr mir helfen?!Ja - wir können Dir helfen.
Für alles was jetzt kommt, gehe ich davon aus, dass sich die besagten Messwerte in Dateien befinden und dass Du es in C++ realisieren möchtest. Weiter nehme ich an, dass nur die Anzahl der Messwerte zum Zeitpunkt der Programmerstellung unbekannt ist.
Grundsätzlich liest Du Variablen & Objekte aus Dateien mit std::ifstream; diese Klasse ist von std::istream abgeleitet und mit der Schnittstelle dieser Klasse kannst Du die eingebauten Typen bereits lesen.Für mehr brauchen wir noch einige Infos:
Wie ist das Format der Datei(en) mit den Messwerten?
Wie soll denn die Filterung der Daten aussehen?
Was soll die Ausgabe Deines Programms sein?Gruß
Werner
-
Vielleicht sowas?
#include <fstream> using std::ifstream; using std::ofstream; using std::ios_base; const size_t DEFAULT_CLUSTER_SIZE = 4096; template<typename T> void FilterData(ifstream& in, ofstream& out, bool (*transmit)(T& data)) { size_t buf_size = (DEFAULT_CLUSTER_SIZE/sizeof(T))*sizeof(T), bytes_read, bytes_to_write; char *in_buf = new char[buf_size], *out_buf = new char[buf_size]; T* data; while( !in.eof() ) { bytes_read = in.read(in_buf, buf_size).gcount(); bytes_to_write = 0; for( int i = 0; i < bytes_read; i += sizeof(T) ) { data = reinterpret_cast<T*>(in_buf + i); if( transmit(*data) ) { memcpy(out_buf + bytes_to_write, data, sizeof(T)); bytes_to_write += sizeof(T); } } out.write(out_buf, bytes_to_write); } delete[] in_buf; delete[] out_buf; } typedef struct st_data { int v1, v2, v3; } T_DATA; bool transmit(T_DATA& data) { return data.v2 % 2 ? true : false; } int main() { T_DATA myValues[] = { {0, 1, 2}, {1, 2, 3}, {2, 3, 4}, {3, 4, 5} }; const char *IN_FILE = "", *OUT_FILE = ""; /* - DATEN ERZEUGEN */ ofstream out(IN_FILE, ios_base::binary); out.write(reinterpret_cast<char*>(myValues), sizeof(T_DATA) * 4); out.close(); /* ---------------- */ FilterData<T_DATA>(ifstream(IN_FILE, ios_base::binary), ofstream(OUT_FILE, ios_base::binary), &transmit); return 0; }
-
FrEEzE2046 schrieb:
Vielleicht sowas?
template<typename T> void FilterData(ifstream& in, ofstream& out, bool (*transmit)(T& data)) {Mach doch die Funktion auch als template-Parameter, dann bist du flexibler und kannst auch Funktoren übergeben.
#include <iostream> using namespace std; template < typename Type, typename Predicate > Type transform(const Type& t, Predicate p) { return p(t); } int mach_was(int in) { return in + 20; } struct mach_was_t { int operator()(int in) const { return in + 21; } }; int main() { mach_was_t mw; for( int i=0; i<100; i+=10) cout << transform(i, mach_was) << " " << transform(i, mw) << endl; }Ist zwar etwas sinnlos, zeigt aber wie es geht.
-
l'abra d'or schrieb:
Ist zwar etwas sinnlos, zeigt aber wie es geht.
Danke, aber ich weiß schon wie sowas geht^^. Ich bin ja nicht derjenige der's braucht. Ich hab mir das einfach mal aus den Fingern gesogen. Wirklich auf das "Problem" zugeschnittene Lösungen kannst du eh nicht erstellen, da er sich "etwas vage" ausgedrückt hat.