nur jede 3. Zeile lesen
-
zeilenweise in einen vektor lesen und dann mit modulo 3 ?
-
zur ersten möglichkeit:
ja klar würde das gehen, aber ist nicht so performant finde ich
zur zweiten möglichkeit:
module sagt mir was, aber vektorrechnung hab ich noch nie gehabt *gg*
sorry
-
std::vector ist eine Container
-
ok ok, ich nehm doch die erste möglichkeit *ggg*
mit containern hab ich noch nie gearbeitet
-
ja klar würde das gehen, aber ist nicht so performant finde ich
Was ist daran nicht performant? wenn du zeilenweise ausliest muss man eh die gesamte Datei durchgehen. Und wenn man nur jede 3. Zeile braucht, warum dann alle speichern?
Esseidenn man will die Datei mehrfalls durchgehen. Dann könnte man überlegen alles einzulesen und jedesmal entsprechend auszuwerten.
-
nicht module, sondern modulo.
das ist einer der basisoperatoren
/
*
% (modulo)
-
ich könnte das natürlich auch ganz anders machen
ich lese jetzt zeile aus, erstelle für jedes merkmal eine eigene Temp datei. später öffne ich dann einfach die temp datei, wo die merkmale drin stehen, die der user will und kann somit zeilenweise lesen und hab für jede zeile auch das gewünschte merkmal
-
Kennst du schon CStringArray? Ist ganz einfach zu handhaben.
Modulo gibt dir den Rest:
3%3 = 0
4%3 = 1
5%3 = 2
6%3 = 0
-
Wobei ich da eher CStringList nehmen würde wegen der flexiblen länge
-
Taelan schrieb:
Wobei ich da eher CStringList nehmen würde wegen der flexiblen länge
Die hat CStringArray doch auch.
-
vector und gut
-
@elise Wie genau meinst du das mit Modulo?
Was hat der Operator damit zu tun?@MSS-Software
Lies am Besten die Datei zeilenweise in ein CStringArray und verarbeite nur, wie gesagt jede 3. Zeile.
Du kannst die Datei auch in einen Vector laden, alsostd::vector<CString> MeinVektor;
wobei aber CStringArray viel einfacher zu handhaben ist (wenn man es nicht gewohnt ist, mit Templates und den STL zu arbeiten).
Wenn du größere Textdateien einlesen willst (sagen wir mehrere MB), empfiehlt es sich (meiner Erfahrung nach) nicht die ganze Datei in den Speicher zu laden, sondern jedes Zeichen einzeln auszulesen, dann zu entscheiden, ob eine neue Zeile beginnt (also quasi nach '\n' suchen), und dann nur jede 3. Zeile zu speichern.
Grüße Raphael
-
Rapha schrieb:
Wenn du größere Textdateien einlesen willst (sagen wir mehrere MB), empfiehlt es sich (meiner Erfahrung nach) nicht die ganze Datei in den Speicher zu laden, sondern jedes Zeichen einzeln auszulesen, dann zu entscheiden, ob eine neue Zeile beginnt (also quasi nach '\n' suchen), und dann nur jede 3. Zeile zu speichern.
Spricht etwas gegen CStdioFile? Das kann ganze Zeilen einlesen.
-
Nein, dagegen spricht natürlich nichts. Mein Freund hat mal nen Benchmark über CStdioFile und das selber einlesen (Dateigröße war glaub 50 mb)laufen lassen wobei das selber einlesen schneller ging (da die Daten von CStdioFile ja gespeichert werden). Wenn man selber liest, kann man sich das Speichern sparen (d.h. nur dann speichern, wenn man es braucht).
Normalerweise kann man darauf natürlich verzichten, ich musste mich damals aber durch kilometerlange Logs parsenund da merkt man es schon ziemlich, wenn man alles erstmal zwischenspeichert, obwohl man es nicht braucht
-
Ahja okay - hab wieder was gelernt.
Die internen Abläufe kannte ich noch nicht. Wenn das erstmal komplett in den Speicher gepackt wird, ist das natürlich ab einer gewissen Menge ein echter Nachteil.
-
warum machst du nicht einfach eine while bedingung?