vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
SteamReader schneidet Datei einfach ab 
Autor: meeresmoewe
Datum: 25.07.11 13:22

Hallo VBler!
ich habe folgenden Code:
Form1.vb:
 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
    End Sub
 
    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
H.txt
Kennzeichen::
H
HA
HAL
HAM
HAS
HB
HBN
HD
HDH
HE
HEF
HEI
HEL
HER
HF
HG
HGW
HH
HI
HL
HM
HN
HO
HOL
HOM
HP
HR
HRO
HS
HSK
HST
HU
HVL
HWI
HX
HZ
Ort::
H
HA
HAL
HAM
HAS
HB
HBN
HD
HDH
HE
HEF
HEI
HEL
HER
HF
HG
HGW
HH
HI
HL
HM
HN
HO
HOL
HOM
HP
HR
HRO
HS
HSK
HST
HU
HVL
HWI
HX
HZ
Aufruf:
lesen("H")
Problem: In der ListView wird nur bis zum Eintrag "HVL" angezeigt, weiter nicht.

Hoffe auf eure Hilfe, meeresmoewe

Visual Basic FTW!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: 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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SteamReader schneidet Datei einfach ab 
Autor: meeresmoewe
Datum: 28.07.11 17:54

Danke, das werde ich mal ausprobieren.

Visual Basic FTW!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SteamReader schneidet Datei einfach ab 
Autor: ModeratorFZelle (Moderator)
Datum: 04.08.11 09:35

Schonmal in den Grundlagen geschaut was ein Using bewirkt?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!!

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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