| |
VB.NET - Ein- und UmsteigerRe: Dynamisches Array (oder bessere Lösung) | | | Autor: mts20 | Datum: 21.01.10 09:12 |
| vielen lieben Dank!
Funktioniert einwandfrei. | |
Dynamisches Array (oder bessere Lösung) | | | Autor: mts20 | Datum: 19.01.10 11:46 |
| Hallo habe ein kleines Problem, zuerst mal meinen Sourcecode:
'Suchstring für Zeilen in denen ausgelesen werden soll (eindeutig)
Dim searchstring As String = "begriff"
'Datei, die durchsucht werden soll nach Tags
Dim sourcefile As String = "C:\Pfad\datei.txt"
'Speicherort
Dim extractfile As String = "C:\Pfad\ausgabe.txt"
Public Function auslesen_u_extrahieren() As Boolean
Dim ausgelesen() As String = File.ReadAllLines(sourcefile)
Dim tags_split() As String
'Leere Ausgabedatei erstellen
File.WriteAllText(extractfile, "")
For i = 0 To ausgelesen.Length - 1
'Wenn der Searchstring in Zeile enthalten ist, dann ausgeben
If InStr(ausgelesen(i), searchstring) Then
tags_split = Split(ausgelesen(i), "/")
File.AppendAllText(extractfile, tags_split(4) & _
Environment.NewLine)
End If
End If
End If
Next
End Function Hab hier eine Funktion, die eine Ausgangsdatei einliest, nach gewissen Strings in Textzeilen sucht und diese (sofern korrekter String enthalten) dann in eine Ausgabedatei wieder Zeilenweise zurückschreiben.
Diese Datei bearbeite ich in einem nächsten Programmschritt wieder weiter, indem ich die neue Datei wieder Zeilenweise auslese in ein Array.
Das muss ich leider so machen, da die ergebnis-datei ja immer eine unterschiedliche größe hat, somit gleich in ein Array wegschreiben nicht geht mit dynamischer größe (oder doch?). Möchte mir den Datei-Puffer sparen und alles Programmintern abarbeiten und erst am Schluss ein Endergebniss auswerfen lassen.
Gibt es da irgendeine elegantere Lösung?
Danke schonmal für euere Hilfe!
Grüße
Diese | |
Re: Dynamisches Array (oder bessere Lösung) | | | Autor: DaveS (Moderator) | Datum: 19.01.10 12:09 |
| Obwohl es geht wenn du die Daten so schreibst ist es sehr ineeffizient, weil die Datei für jede Zeile geöffnet, bis Ende positioniert, geschreiben und geschlossen wird. Ich würde eher so etwas vorschlagen (nicht getestet, klar).
Public Function auslesen_u_extrahieren() As Boolean
Dim tags_split() As String
'Leere Ausgabedatei erstellen
Dim sw As New StreamWriter(extractfile)
For Each line As String in File.ReadAllLines(sourcefile)
'Wenn der Searchstring in Zeile enthalten ist, dann ausgeben
If InStr(line, searchstring) > 0 Then
tags_split = Split(line, "/")
sw.WriteLine(extractfile, tags_split(4))
End If
Next
sw.Close()
End Function ________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist | |
Re: Dynamisches Array (oder bessere Lösung) | | | Autor: Manfred X | Datum: 19.01.10 13:48 |
| Hallo!
Es kann sein, dass ich die völlig mißverstanden habe!
In dem Fall: Sorry!
Falls Du einfach die Zeilen aus einer Datei gefiltert einlesen willst,
wobei Du nicht weisst, wieviele Zeilen beim Filtern übrig bleiben, verwende
einfach eine generische List(Of T).
Dim lst As New System.Collections.Generic.List(Of String)
Jede gefilterte Zeile hängst Du an der Liste an mit
lst.add("gefilterte Zeile")
Übertragen der fertig gefüllten Liste in ein Array geht mit:
Dim lines_filtered() As String = lst.ToArray
Das Array "Lines" wird automatisch in der erforderlichen Größe erstellt ...
Das Schreiben und Neulesen der Datei ist damit unnötig.
Wie gesagt: Fall ich die richtig verstanden habe .....
MFG Manfred | |
Re: Dynamisches Array (oder bessere Lösung) | | | Autor: mts20 | Datum: 19.01.10 17:55 |
| Danke für eure Hilfe!
Denke das ist genau das was ich gesucht habe, Manfred. Werds mal ausprobieren.
Schönen Abend noch!
Grüße | |
Re: Dynamisches Array (oder bessere Lösung) | | | Autor: mts20 | Datum: 21.01.10 07:06 |
| Eine Frage hätte ich noch zu dem ganzen: wie kann ich aus der Liste bzw. direkt aus dem Array duplikate auf die einfachste Art entfernen?
Gibt es da eine bestimmte Funktion?
Grüße | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|