| |
VB.NET - Ein- und UmsteigerTextfile auslesen | | | Autor: stefanbla80 | Datum: 22.10.14 15:48 |
| Hallo zusammen,
ich habe eine Frage zum Auslesen von TXT-Files.
Z. B. habe ich eine TXT mit folgendem Inhalt:
--------------------
Hinweise_Start
Blablabla
Usw
Und nochmal
Hinweise_Ende
--------------------
--------------------
Rückinfo_Start
Blablabla
Usw
Und nochmal
Rückinfo_Ende
--------------------
Ich würde gerne zwischen Start und Ende die kompletten Zeilen auslesen und z. B. in einer TextBox ausgeben.
Geht das?!
Grüße
Stefan | |
Re: Textfile auslesen | | | Autor: stefanbla80 | Datum: 22.10.14 16:34 |
| Hallo DaveS,
ich muss gestehen nein.
Bisher habe ich es nicht mehr gebraucht, aber jetzt kommt dieses Thema auf.
Mit der beschriebenen Lösung komme ich nicht wirklich weiter.
Grüße
Stefan | |
Re: Textfile auslesen | | | Autor: Manfred X | Datum: 22.10.14 18:24 |
| Vielleicht hilft dieses Thema weiter ...
http://www.vbarchiv.net/forum/id10_i74212t74212_von-einem-zeichen-bis-ein-anderes-zeichen-lesen.html
... die Art der Codierung der Zeichen in Deiner Datei ist zu beachten !
Lesen des Dateiinhaltes z.B. per ReadAllLines-Methode in ein Zeilenarray.
Da die Identifier Start/Ende Substrings am Ende der gesuchten Zeilen sind,
mußt Du vermutlich (Zeile).Trim.ToUpper.EndsWith "_START" und "_ENDE" verwenden.
Dadurch werden auch Spaces am Zeilenende und Variationen in der
Groß-/Kleinschreibung berücksichtigt.
Beitrag wurde zuletzt am 22.10.14 um 18:36:17 editiert. | |
Re: Textfile auslesen | | | Autor: effeff | Datum: 22.10.14 19:52 |
| Moin,
im Notfall liest Du die Datei einfach zeilenweise aus:
Public Class Form1
'Wir haben einen Button1 auf der Form1 und eine TextBox1 mit Einstellung
' "Multiline":
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
Handles Button1.Click
Dim strDatei As String = "d:\testdatei.txt"
Dim strZeile As String
Dim strText As String
Dim sr As New System.IO.StreamReader(strDatei)
Do While Not sr.EndOfStream
strZeile = sr.ReadLine()
If strZeile.Contains("_Start") Then
Do
strZeile = sr.ReadLine()
If Not strZeile.Contains("_Ende") Then
strText = strText & strZeile & vbCrLf
End If
Loop Until strZeile.Contains("_Ende")
End If
Loop
sr.Close()
TextBox1.Text = strText
End Sub
End Class EALA FREYA FRESENA | |
Bedeutung des Begriffs: Auslesen | | | Autor: Manfred X | Datum: 22.10.14 20:24 |
| Was genau bedeutet in der Informatik der Begriff "auslesen"?
So weit mir bekannt, liegt dabei die Betonung auf der Hardware-Operation.
"Auslesen" verwendet man meines Erachtens, wenn die "rohen" Informationen
von Speicher-Medien (z.B. Festplatten oder Sticks) abgezogen/kopiert werden.
Für Daten, die über ein Dateisystem (bzw. strukturiert) abgefragt werden,
benutzt man gewöhnlich den Begriff "lesen".
"Auslesen" wird gelegentlich verwendet, wenn der Inhalt einer Datenbank
vollständig kopiert wird - auch hier unter Hervorhebung des binären
Daten-Stroms.
Der Duden schafft hier kaum Klarheit:
http://www.duden.de/rechtschreibung/auslesen_lesen_Daten_abrufen
Wie beurteilt ihr das?
Beitrag wurde zuletzt am 22.10.14 um 20:28:20 editiert. | |
Re: Bedeutung des Begriffs: Auslesen | | | Autor: stefanbla80 | Datum: 22.10.14 20:47 |
| Hallo zusammen,
nach der genannten Definition möchte ich die Textdateien "lesen".
Grüße
Stefan | |
Re: Bedeutung des Begriffs: Auslesen | | | Autor: Manfred X | Datum: 22.10.14 20:50 |
| Der Zugriff auf strukturierte Infos in einer Zeilenweise
aufgebauten Text-Datei ist relativ einfach.
Falls es sich nicht um einen Notfall handelt .....
Public Function ReadBlocks _
(ByVal filename As String) As List(Of List(Of String))
If Not IO.File.Exists(filename) Then Return Nothing
Dim lines() As String = IO.File.ReadAllLines(filename)
If lines.Length < 3 Then Return Nothing
Dim startindex As Integer = -1
Dim blocklist As New List(Of List(Of String))
Dim blockheader As String = ""
For i As Integer = 0 To lines.Count - 1
If lines(i).Trim.ToUpper.EndsWith("_START") Then
If Not startindex = -1 Then Return Nothing 'ENDE fehlt
startindex = i + 1
blockheader = lines(i).Trim.ToUpper.Replace("_START", "")
End If
If lines(i).Trim.ToUpper.EndsWith("_ENDE") Then
If startindex = -1 Then Return Nothing 'START fehlt
Dim block As New List(Of String)
block.Add(blockheader)
For k As Integer = startindex To i - 1
block.Add(lines(k))
Next k
startindex = -1 'Suche nach dem nächsten Block
blocklist.Add(block)
End If
Next i
If Not startindex = -1 Then Return Nothing 'ENDE fehlt
Return blocklist
End Function | |
Re: Bedeutung des Begriffs: Auslesen | | | Autor: Manfred X | Datum: 22.10.14 21:04 |
| Hallo!
Im Duden wird der Bezug zu einem Speichermedium hergestellt:
z.B. Informationen von einer Festplatte abrufen.
Vom "Auslesen" einer Datei oder Datenbank steht eigentlich
nichts da. Eine Datei ist erst durch ein Dateisystem erstellbar.
Die Frage ist: Bezieht sich der Begriff Auslesen nur auf den
Zugriff auf "rohe" Daten aus einem Speicherbereich (low-level) ???
In Foren werden die Begriffe "Datei lesen" und "Datei auslesen"
tatsächlich häufig synonym verwendet.
| |
Re: Textfile auslesen | | | Autor: stefanbla80 | Datum: 23.10.14 06:51 |
| Guten morgen,
vielen Dank für den Code - das funktioniert so wie gedacht/gehofft.
Jetzt würde ich gerne den Text editieren. Jedoch sollte der neu geschriebene Text genau in diesen Absatz "Start/Ende" geschrieben werden - und dann noch an erster Stelle (für so ne Art Historie).
Mit dem unten genannten Code kann ich ja einfach den Inhalt der Textbox nehmen und diesen "erweitern". Dann werden jedoch die Einträge immer unten angehängt und eben nicht in den Block geschrieben.
Private Sub Schreiben()
Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter( _
My.Application.Info.DirectoryPath & "\Data\" & "Test.txt", True)
file.WriteLine("Here is the first string." & vbNewLine & vbNewLine & _
TextBox1.Text)
file.Close()
End Sub Habt Ihr hier noch einen Tipp?!
Grüße
Stefan | |
Re: Textfile auslesen | | | Autor: Manfred X | Datum: 23.10.14 09:19 |
| Hallo!
Dir fehlen leider alle Grundlagen-Kenntnisse.
Textdateien sind sequentielle Dateien.
Der einfachste Weg:
Den Datei-Inhalt komplett lesen und in Zeilen aufspalten
(z.B. durch IO.File.ReadAllLines).
Diese Zeilen kannst Du dann in eine TextBox eintragen
und dort auch neue Zeilen einfügen.
Auf dieser Grundlage muß die Datei neu aus den Zeilen in der
Textbox aufgebaut werden (z.B. WriteAllLines).
Falls in der Textbox nicht alle Zeilen eingetragen werden,
muß eine blockweise Bearbeitung erfolgen (siehe meinen Vorschlag).
Beitrag wurde zuletzt am 23.10.14 um 09:21:58 editiert. | |
Re: Textfile auslesen | | | Autor: stefanbla80 | Datum: 23.10.14 11:05 |
| Ich stelle mich sicher nur zu doof an ...
Komme jedoch nur nicht mit diesem definierten Schreiben genau in diesem genannten Bloch zurecht.
Ich lese den Block und möchte dann in der TextBox den Text editieren und genau wieder in diesen Block schreiben.
Sind das noch die einfachsten Grundlagen?! Bin mir da nicht sicher | |
Re: Textfile auslesen | | | Autor: Manfred X | Datum: 23.10.14 11:34 |
| Ungetestet - Demo !!!!
Public Class frmBlock
Dim WithEvents cboBlocks As New ComboBox With {.Parent = Me}
Dim tboBlock As New TextBox With _
{.Parent = Me, .Top = 50, .Multiline = True, _
.Width = 200, .Height = 200}
Dim WithEvents btnSpeichern As New Button With _
{.Parent = Me, .Top = 300, .Text = "Speichern"}
Dim blocks As List(Of List(Of String))
Private Sub frmBlock_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
'siehe gestrigen Beitrag - weiter unten im Thread
blocks = ReadBlocks("C:\Daten\start_ende.txt")
For i As Integer = 0 To Blocks.count - 1
cboBlocks.Items.Add(blocks(i)(0))
Next i
cboBlocks.SelectedItem = 0
End Sub
Private Sub cboBlocks_SelectedIndexChanged(sender As Object, _
e As System.EventArgs) Handles cboBlocks.SelectedIndexChanged
SetBlock()
End Sub
Private Sub btnSpeichern_Click(sender As Object, _
e As System.EventArgs) Handles btnSpeichern.Click
Speichern()
End Sub
Private Sub Speichern()
GetBlock()
Using tw As New IO.StreamWriter("C:\daten\ausgabe.txt")
For i As Integer = 0 To blocks.Count - 1
Dim header As String = blocks(i)(0) & "_Start"
Dim footer As String = blocks(i)(0) & "_Ende"
tw.WriteLine(header)
For k As Integer = 1 To blocks(i).Count - 1
tw.WriteLine(blocks(i)(k))
Next k
tw.WriteLine(footer)
tw.WriteLine("")
Next i
End Using
End Sub
Private Sub GetBlock()
'aktuellen Block aus Textbox in BlockListe übertragen
Dim ind As Integer = cboBlocks.SelectedIndex
With tboBlock
Dim header As String = blocks(ind)(0)
blocks(ind).Clear()
blocks(ind).Add(header)
For i As Integer = 0 To .Lines.Length - 1
blocks(ind).Add(.Lines(i))
Next i
End With
End Sub
Private Sub SetBlock()
'aktuellen Block in Textbox eintragen
tboBlock.Clear()
Dim ind As Integer = cboBlocks.SelectedIndex
For k As Integer = 1 To blocks(ind).Count - 1
tboBlock.AppendText(blocks(ind)(k) & vbCrLf)
Next k
End Sub
End Class
Beitrag wurde zuletzt am 23.10.14 um 12:03:52 editiert. | |
Re: [Betreff fehlt] | | | Autor: Micke | Datum: 24.10.14 12:12 |
| bzw. wo sind die like Buttons ^^ ?
Micke | |
Bedeutung des Begriffs: Auslesen | | | Autor: Manfred X | Datum: 27.10.14 21:48 |
| Hallo!
Analogie-Bildungen helfen nicht weiter.
Mir geht es um die fachliche Bedeutung innerhalb der INFORMATIK.
In Foren wird "Datei auslesen" oft verwendet, aber
aus der Literatur kenne ich nur "Speicherbereich auslesen",
"Speichermedium auslesen" oder "Datenbank auslesen" = den Inhalt vollständig kopieren.
Ich wollte wissen, ob die Formulierung "Datei auslesen" bereits Eingang in die
Fachliteratur gefunden hat.
| |
Re: Bedeutung des Begriffs: Einlesen | | | Autor: Manfred X | Datum: 27.10.14 23:47 |
| Hallo!
Danke für den Hinweis.
Diese Überschrift lautet im Original ....
[I]How to read a text file by using System.IO in Visual Basic 2005 or in Visual Basic .NET[/I]
Ich denke, die Verwendung des Begriffs "auslesen" würde mit dem synonym
gebrauchten Begriff "einlesen" kollidieren (--> unklare Bedeutung: I/O).
Der Duden stellt im Rahmen der EDV auch beim Verb "einlesen"
den Bezug zur Hardware her:
http://www.duden.de/rechtschreibung/einlesen
Beitrag wurde zuletzt am 28.10.14 um 00:00:38 editiert. | |
| 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 |
|
|
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 InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|