myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » n-te Zeile aus Textdatei ohne Iterieren auslesen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

n-te Zeile aus Textdatei ohne Iterieren auslesen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
LexTertia LexTertia ist männlich
myCSharp.de-Mitglied

Dabei seit: 25.04.2012
Beiträge: 2
Entwicklungsumgebung: Visual Studio


LexTertia ist offline

n-te Zeile aus Textdatei ohne Iterieren auslesen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.487
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 LexTertia ist männlich
myCSharp.de-Mitglied

Dabei seit: 25.04.2012
Beiträge: 2
Entwicklungsumgebung: Visual Studio

Themenstarter Thema begonnen von LexTertia

LexTertia ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.593


ujr ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.487
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 husky410 ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-1712.jpeg


Dabei seit: 18.08.2005
Beiträge: 219
Entwicklungsumgebung: VS 2010
Herkunft: Ostwestfalen NRW


husky410 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.487
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 22.05.2013 03:11