LexTertia
myCSharp.de-Mitglied
Dabei seit: 25.04.2012
Beiträge: 2
Entwicklungsumgebung: Visual Studio
|
|
Hallo Leute!
Weiß jemand von euch vielleicht wie ich die n-te Zeile aus einer Textdatei auslesen kann ohne alle vorherigen Zeilen auszulesen?
Zur Verdeutlichung warum:
Lies aus 50 Dateien jeweils die 1300te Zeile aus - deswegen möchte ich nicht durchiterieren ^^
Bin schon gespannt ob jemand eine Idee hat...
Lg, Lex
|
|
25.04.2012 13:55
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
herbivore
myCSharp.de-Team (Admin)
Dabei seit: 11.01.2005
Beiträge: 47.476
Entwicklungsumgebung: csc/nmake (nothing is faster) Herkunft: Berlin
|
|
Hallo LexTertia,
das Thema hatten wir schon. Solange die Zeilen eine feste oder berechenbare Länge haben oder man sich die Länge der Zeilen irgendwo (in einem Index) gemerkt hat, geht das natürlich. Dann kann man den Byte-Offset einer beliebigen Zeile berechnen und per Seek direkt dort hin springen. Wenn die Länge der einzelnen Zeilen unbekannt ist, hilft nur das Durchsuchen des gesamten Inhalts der Datei bis man bei der gesuchten Zeile angekommen ist.
Gemeint ist die Länge der Zeilen in Bytes. Die Länge der Zeilen in Zeilen nützt dann nichts, wenn ein Zeichensatz verwendet wird, bei der unterschiedliche Zeichen unterschiedlich lange Codes haben.
Die Überlegung gilt natürlich nicht nur auf Ebene einzelner Zeilen, sondern man kann sie auch auf Blöcke von Zeilen übertragen. Wenn man z.B. weiß, dass 10 aufeinander folgende Zeilen zusammen immer 1000 Bytes lang sind, kann man den Beginn jeder 10ten Zeile ausrechnen und muss dann nur noch maximal 9 Zeilen sequentielle durchsuchen, um den Anfang einer beliebigen Zeile zu ermitteln.
Wenn man Einfluss auf den Aufbau der Datei hat, kann man evtl. Platzhalter einfügen, damit jeder solche Block die gleiche Länge hat.
herbivore
|
|
25.04.2012 14:00
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
LexTertia
myCSharp.de-Mitglied
Dabei seit: 25.04.2012
Beiträge: 2
Entwicklungsumgebung: Visual Studio
Themenstarter
|
|
Leider ist das nicht der Fall.
Wenn es da keine anderen Möglichkeiten gibt bleiben mir wohl nur die Empfehlung für den User sich in Geduld zu üben während das Progi werkt...
Danke erstmal für deine Antwort!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LexTertia am 25.04.2012 14:09.
|
|
25.04.2012 14:07
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
ujr
myCSharp.de-Poweruser/ Experte
Dabei seit: 24.11.2007
Beiträge: 1.592
|
|
Hallo,
zumindest könntest Du es Dir etwas einfacher machen, wenn die Dateien nicht zu groß sind, jeweils komplett im Speicher zu landen: benutze File.ReadAllLines
|
|
26.04.2012 09:15
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
herbivore
myCSharp.de-Team (Admin)
Dabei seit: 11.01.2005
Beiträge: 47.476
Entwicklungsumgebung: csc/nmake (nothing is faster) Herkunft: Berlin
|
|
Hallo ujr,
... sofern der Hintergrund der Frage die Einfachheit/Übersichtlichkeit/Lesbarkeit des Code war, sicher. Sofern der Hintergrund der Frage die Performance war, gewinnt man dadurch nichts, im Gegenteil wird ja auch dann die gesamte Datei gelesen, wenn z.B. die erste Zeile gewünscht ist. Das nur als Ergänzung, um deinen Tipp richtig einzuordnen/einzuschätzen.
herbivore
|
|
26.04.2012 09:20
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
husky410
myCSharp.de-Mitglied
Dabei seit: 18.08.2005
Beiträge: 219
Entwicklungsumgebung: VS 2010 Herkunft: Ostwestfalen NRW
|
|
Nur so als Denkanstoß...
Vielleicht hast Du ja Einfluss darauf die Textdatei durch ein XML-Format zu ersetzen. Damit könntest Du dann viel gezielter auf bestimmte Daten zugreifen ohne zeitaufwendiges Parsing...
XML ist schon lange keine Zukunft mehr sondern ewig Gegenwart.
|
|
26.04.2012 10:07
|
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|
herbivore
myCSharp.de-Team (Admin)
Dabei seit: 11.01.2005
Beiträge: 47.476
Entwicklungsumgebung: csc/nmake (nothing is faster) Herkunft: Berlin
|
|
Hallo husky410,
hier gilt wieder der gleiche Einwand: Zwar ist es codemäßig einfach, auf den x-ten Knoten einer XML-Datei zu zugreifen, aber hinter den Kulissen (also in den entsprechenden Framework-Klassen), muss die Datei mindestens bis zu der Stelle mit dem gewünschten Inhalt komplett gelesen werden.
herbivore
|
|
26.04.2012 10:16
|
E-Mail |
Beiträge des Benutzers |
zu Buddylist hinzufügen
|
|