| |
VB.NET - Ein- und UmsteigerRe: SteamReader schneidet Datei einfach ab | | | Autor: Code_mancer | Datum: 25.07.11 13:34 |
| Mhm ich sehe jetzt erstmal nix sonderlich verfängliches...
Aber wenn du schon die Vermutung äußerst, dass der StreamReader irgendwo müll baut, solltest du auch den Code posten, wo der StreamReader auftaucht.
MfG
--------------------
Ich habe keine besondere Begabung, sondern bin nur leidenschaftlich neugierig.
- Albert Einstein | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: meeresmoewe | Datum: 27.07.11 11:46 |
| Hier der Code:
Sub TippsEinlesen()
Kennzeichen = BereichEinlesen("Kennzeichen")
Ort = BereichEinlesen("Ort")
End Sub
Function BereichEinlesen(ByVal Bereich As String) As String()
Dim Zeile As String
Dim ZeilenNr As Integer
Dim Zeilen() As String
Dim Gefunden As Boolean
Using Sr As New StreamReader(Tippsdatei, Encoding.ASCII)
While Not Sr.EndOfStream
Zeile = Sr.ReadLine
If Zeile.StartsWith(Bereich & "::") Then
Gefunden = True
Exit While
End If
End While
If Gefunden = False Then Return Nothing
' Jetzt bis zum nächsten Bereich oder Ende des Streams lesen
Do While Not Sr.EndOfStream
Zeile = Sr.ReadLine()
If Zeile.Contains("::") Then Exit Do
ReDim Preserve Zeilen(ZeilenNr)
Zeilen(ZeilenNr) = Zeile
ZeilenNr += 1
Loop
End Using
Return Zeilen
End Function Visual Basic FTW!! | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: Code_mancer | Datum: 27.07.11 14:02 |
| Ich habe deinen Code gerade mal getestet.
Dein Phänomen konnte ich nicht beobachten. Das Programm läuft sauber durch. Das Problem liegt also vermutlich an einer anderen Stelle. Prüfe mal die Einstellungen, die du an der ListView vorgenommen hast. Erstell sie vielleicht sogar neu und versuche es mal mit einer "sauberen" Instanz.
Nebenbei: Du arbeitest ein bisschen umständlich für meinen "Geschmack". Benutze anstelle der String-Arrays z.B. eine List(of String). Dann musst du bei Auslesen nicht so mit der ZeilenNr rumjonglieren. Da du später ein Array brauchst, kannst du mit List.toArray direkt ein neues Array erzeugen, das von der Liste selbst unabhängig bleibt.
Weiterhin packst du die Datei zweimal an. Beim ersten Mal zwar nur zur Hälfte, aber beim zweiten Durchlauf packst du nochmal die Einträge an, bei denen ganz genau klar ist, dass du sie nicht brauchst. Geh lieber hin und durchlaufe die Datei ein einzige Mal. Du musst dann nur bei "Kennzeichen::" bzw. "Ort::" entscheiden, wo die danach gefundenen Einträge landen sollen.
Und noch ein kleiner Tip: Versuch bei Sachen wie Zugriffsmodifizierer oder Standardwerte konsequent zu sein. In den meisten Fällen erzeugt das Weglassen keine unerwünschte Effekte, aber der Überblick kann maßgeblich schwinden.
Dim Zeile As String = String.Empty
Dim ZeilenNr As Integer = 0
Dim Zeilen() As String = {String.Empty}
Dim Gefunden As Boolean = false --------------------
Ich habe keine besondere Begabung, sondern bin nur leidenschaftlich neugierig.
- Albert Einstein | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: meeresmoewe | Datum: 28.07.11 17:54 |
| Danke, das werde ich mal ausprobieren.
Visual Basic FTW!! | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: meeresmoewe | Datum: 29.07.11 11:11 |
| Hallo. Dien Vorschlag funktioniert einfach nicht.
Hier der ganze Code:
' -----------------------------------------------
' Der große Ratgeber in allen Lebenslagen
' Jetzt lerne ich Visual Basic 2008
' -----------------------------------------------
Imports System.IO
Imports System.Text
Public Class Form1
Private Kennzeichen(), Ort() As String
Private Tippsdatei As String
Private actual As Char
Sub TippsEinlesen()
Kennzeichen = BereichEinlesen("Kennzeichen")
Ort = BereichEinlesen("Ort")
End Sub
Function BereichEinlesen(ByVal Bereich As String) As String()
Dim Zeile As String = String.Empty
Dim ZeilenNr As Integer = 0
Dim Zeilen() As String = {String.Empty}
Dim Gefunden As Boolean = False
Using Sr As New StreamReader(Tippsdatei, Encoding.ASCII)
While Not Sr.EndOfStream
Zeile = Sr.ReadLine
If Zeile.StartsWith(Bereich & "::") Then
Gefunden = True
Exit While
End If
End While
If Gefunden = False Then Return Nothing
' Jetzt bis zum nächsten Bereich oder Ende des Streams lesen
Do While Not Sr.EndOfStream
Zeile = Sr.ReadLine()
If Zeile.Contains("::") Then Exit Do
ReDim Preserve Zeilen(ZeilenNr)
Zeilen(ZeilenNr) = Zeile
ZeilenNr += 1
Loop
End Using
Return Zeilen
End Function
''' <summary>
''' Fügt dem ListView eine komplette Datenzeile hinzu
''' </summary>
''' <param name="lvw">ListView-Control</param>
''' <param name="Text">Parameterliste der einzelnen Zellenwerte</param>
Public Sub lvwAddItem(ByVal lvw As ListView, ByVal ParamArray Text() As _
String)
With lvw.Items
' 1. Eintrag hinzufügen
With .Add(Text(0))
If Text.Length > 1 Then
' String-Array für die weiteren Zellen erstellen...
Dim SubItems(Text.Length - 1) As String
Array.Copy(Text, 1, SubItems, 0, Text.Length - 1)
' ... und diese via AddRange dem ListView hinzufügen
.SubItems.AddRange(SubItems)
End If
End With
End With
End Sub
Private Sub Form_Load(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
alle_lesen()
End Sub
Sub alle_lesen()
'Listview leeren
lvKennzeichen.Items.Clear()
lesen("A")
lesen("B")
lesen("C")
lesen("D")
lesen("E")
lesen("F")
lesen("G")
lesen("H")
lesen("I")
lesen("J")
lesen("K")
lesen("L")
lesen("M")
lesen("N")
lesen("O")
lesen("P")
lesen("Q")
lesen("R")
lesen("S")
lesen("T")
lesen("U")
lesen("V")
lesen("W")
lesen("X")
lesen("Y")
lesen("Z")
lvKennzeichen.Focus()
End Sub
Sub lesen(buchstabe As String)
Tippsdatei = buchstabe + ".txt"
TippsEinlesen()
Dim z As Integer = 0 'zählervariable
If Kennzeichen IsNot Nothing Then
Do Until z = UBound(Kennzeichen) + 1
lvwAddItem(lvKennzeichen, Kennzeichen(z), Ort(z))
z = z + 1 'z erhöhen um 1
Loop
End If
lvKennzeichen.Focus()
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Click, Button9.Click, Button8.Click, Button7.Click, _
Button6.Click, Button5.Click, Button4.Click, Button3.Click, _
Button26.Click, Button25.Click, Button24.Click, Button23.Click, _
Button22.Click, Button21.Click, Button20.Click, Button2.Click, _
Button19.Click, Button18.Click, Button17.Click, Button16.Click, _
Button15.Click, Button14.Click, Button13.Click, Button12.Click, _
Button11.Click, Button10.Click, Button1.Click
'Listview leeren
lvKennzeichen.Items.Clear() 'ListView leeren
lesen(sender.text.ToString) 'Kennzeichen einlesen
lvKennzeichen.Focus() 'Fokus auf ListView
End Sub
Private Sub Button27_Click(sender As System.Object, e As System.EventArgs) _
Handles Button27.Click
alle_lesen()
End Sub
Private Sub Form1_Resize(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Resize
lvKennzeichen.Size = Me.Size
End Sub
End Class Visual Basic FTW!! | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: Code_mancer | Datum: 29.07.11 12:00 |
| Was für Eigenschaften hast du im ListView gesetzt?
--------------------
Ich habe keine besondere Begabung, sondern bin nur leidenschaftlich neugierig.
- Albert Einstein | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: Manfred X | Datum: 29.07.11 12:03 |
| Hallo!
Lies einfach mal mit "IO.File.Readallines" den kompletten
Dateiinhalt (Zeilen) in ein Stringarray und schau im Array nach,
ob tatsächlich alles gelesen wird.
Vielleicht steht ein Steuerzeichen dazwischen, das den
Lesevorgang unterbricht o.ä. ...????
MfG
Manfred
Beitrag wurde zuletzt am 29.07.11 um 12:08:18 editiert. | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: Vento | Datum: 04.08.11 07:48 |
| Wo ist eigentlich das Sr.Close? Habe ich das übersehen?
Dieses Phänomen hatte ich schon als ich das Schließen vergessen hatte. | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: FZelle (Moderator) | Datum: 04.08.11 09:35 |
| Schonmal in den Grundlagen geschaut was ein Using bewirkt? | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: Vento | Datum: 04.08.11 11:39 |
| Ja habe ich. Es wird ein Dispose ausgeführt welches ein Close enthält.
Ich dachte nur zum Test kann ein Close nicht schaden. | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: meeresmoewe | Datum: 09.11.11 16:25 |
| Nein, er liest bis zum Ende.
Hat nicht jemand noch eine Lösung?
Visual Basic FTW!! | |
Re: SteamReader schneidet Datei einfach ab | | | Autor: Preisser | Datum: 09.11.11 17:13 |
| Hallo,
könntest du die verwendete Textdatei mal auf einen Webserver/Uploaddienst hochladen, sodass man sie hier herunterladen kann? (Also nicht einfach den Inhalt der Datei in den Beitrag kopieren, sondern die Datei, so wie sie ist, auf einen Server hochladen.)
Evtl. kann man dann noch etwas sagen. | |
| 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! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. 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
|