CSV Datei durchsuchen nach fehlenden Nummern.

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Eierlein.

    CSV Datei durchsuchen nach fehlenden Nummern.

    Hallo Zusammen,

    ich möchte mit VB.NET 2017 eine .csv Datei einlesen die von unserer Telefonanlage kommt. Dort sind die internen Durchwahlnummern in einer Spalte hinterlegt (Bereich 4000 - 8000) (nicht fortlaufend)
    Da ich mir gelegentlich einen Überblick verschaffen möchte, welche nummern zwischendrin noch frei sind (wurden komplett gelöscht), würde ich diese gerne entweder in einer TextBox oder Listview augeben (Letzteres finde ich wesentlich eleganter) damit ich diese beim anlegen eines neuen Telefons wiederverwenden kann.

    Vielen dank schon einmal für eure Hilfe.
    Willkommen im Forum.
    Da bisher nicht abzuschätzen ist, ob Du schon was probiert hast oder wie fit Du im Programmieren bist, hier ein paar Stichworte bzw. eine Möglichkeit des Vorgehens:
    • Datei bei IO.File.ReadAllLines auslesen
    • For-Each-Schleife über alle Zeilen durchführen
    • jede Zeile per Split.Extension am Datentrennzeichen (;? ,?) aufspalten
    • den Wert der Zielspalte in einen Integer parsen und in eine List(Of Integer) überführen
    • Liste sortieren
    • For-Schleife vom Soll-Startwert bis End-Startwert mit den Listeninhalten vergleichen und fehlende Einträge in eine weitere List(Of Integer) überführen - oder notfalls in Dein Ziel-CE wie eine ListBox
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hat erstmal nichts mit Datenbank zu tun, sehe ich jedenfalls nicht. Schön wäre ein Dataset in das Du die CSV-Datei einliest.
    Und dein Code bisher? Den sehe ich auch nicht.
    Falls Du noch gar nichts geschrieben hast, sowohl dieses Forum selbst als auch die endlosen Weiten des Internets sind zu diesem Thema schon mit fast fertigem Code für deine Anfrage vollgestopft.
    So sieht das ganze aktuell bei mir aus:

    Imports Microsoft.VisualBasic.FileIO
    Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Dateiname As String = "c:\Folder\NumPlan.csv"
    Using csvParser As New TextFieldParser(Dateiname)
    With csvParser
    ' Feld-Trennzeichen
    .SetDelimiters(",")

    ' Festlegen, ob die Datenfelder in Anführungszeichen stehen
    .HasFieldsEnclosedInQuotes = True ' bzw. False

    ' Falls die 1. Zeile die Spaltennamen enthält
    Dim Header As String = .ReadLine()

    ' Datei zeilenweise durchlaufen
    Dim FieldData() As String
    Do While Not .EndOfData
    ' alle Datenfelder der aktuellen Datenzeile lesen
    FieldData = .ReadFields()

    Debug.Print(FieldData(0)) ' 1. Feld
    Debug.Print(FieldData(1)) ' 2. Feld
    Debug.Print(FieldData(2)) ' 3. Feld

    Dim x As Integer
    x = ListView1.Items.Count + 1
    ListView1.Items.Add(x)
    ListView1.Items(x - 1).SubItems.Add(FieldData(1))


    Loop
    End With
    End Using
    End Sub
    End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mirco88“ ()

    Hmjoa, warum nicht?
    Wenn Du jetzt noch die Daten in Integer umwandelst und diese dann alle durcharbeitest, sollte es doch passen

    VB.NET-Quellcode

    1. Dim NumberList As New List(Of Integer)
    2. '...
    3. NumberList.Add(Integer.Parse(FieldData(1)))
    4. '...
    5. Dim SortedNumberList = NumberList.OrderBy(Function(x) x).ToList '*
    6. For i = 0 To SortedNumberList.Count - 2
    7. If SortedNumberList(i) < SortedNumberList(i + 1) - 1 Then ListBox1.Items.Add(SortedNumberList(i))
    8. Next


    *ToList kann man sich auch schenken, aber dann würde der Name "SortedNumberList" nicht mehr passen :P
    btw: bitte CodeTags verwenden, damit's übersichtlicher wird
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.