Brauche hilfe zur Code Optimierung

  • VB.NET

Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von C.Donat.

    Brauche hilfe zur Code Optimierung

    Hallo zusammen,

    erstmal ein Großes Lob zu diesem Tollen Forum. Es hat mir als Neueinsteiger schon sehr oft geholfen.
    Ich habe ein kleines Programm geschrieben welches aus einer CSV über Excel Termine ausließt und
    dann in den gewählten Outlook Kalender übergibt. Leider ist es nicht gerade das schnellste wenn
    die Liste mehr als 100 Einträge hat da diese Vorher noch zusammengefasst werden müssen.

    Nun hoffe ich auf Hilfe von euch zur Optimierung und Verbesserung des Codes.


    Was sagt ihr dazu?? Bin über jede Hilfe oder Tips dankbar.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „C.Donat“ ()

    Willkommen im Forum. :thumbup:

    C.Donat schrieb:

    VB.NET-Quellcode

    1. Button1_Click(...)
    wird dann zu

    VB.NET-Quellcode

    1. Dim CSV As String
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. OpenFileDialog1.Filter = "CSV-Dateien|*.csv|Alle DAteien|*.*"
    4. OpenFileDialog1.FileName = ""
    5. If OpenFileDialog1.ShowDialog() <> System.Windows.Forms.DialogResult.OK Then
    6. Return
    7. End If
    8. CSV = OpenFileDialog1.FileName
    9. TextBox1.Text = CSV
    10. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    nafets3646 schrieb:

    Ich würde mal sagen: Mach Option Strict auf On. Dann wirst du sicher ein paar Fehler angezeigt bekommen, die kannst du dann ja hier posten :).
    So das habe ich jetzt gemacht. Die ersten paar Fehler mit dem späten Binden konnte ich lösen nur nun bleibe ich bei Zeile
    68 hängen. Ich weiß nicht wie ich Intnr deklarieren muss damit die letzte gefüllte Zelle dahin kommt
    so jetzt hab ich alle fehler mit Option Strict on behoben bis auf einen.



    Bei Zeile 21 bis 28 sind die jeweiligen Werte mit . wie.Start oder .Subject mit der Fehlermeldung
    option strict on lässt spätes binden nicht zu versehen. Ich finde auch keinen anhaltspunkt wie ich diese
    beheben kann

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „C.Donat“ ()

    C.Donat schrieb:

    VB.NET-Quellcode

    1. Dim objAppointmentItem As Object
    Diese Zeile verhindert das.
    Ein OCX-Control (Excel) gestattet nicht immer die Typisierung von dessen Datenklassen / -strukturen, da ist Strict Off ausnahmsweise erlaubt.
    Aber:
    Wozu brauchst Du Excel, wenn Du mit CSV hantierst?
    Excel ist in diesem Punkt sehr länderspezifisch, dasd wäre für Dein Problem suboptimal.
    Such mal im Forum, da gibt es beliebig viele Beiträge zum Einlesen von CSV-Dateien.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    ich habe jetzt komplett neu angefanen um es ohne Excel zu machen und bin schon so weit gekommen.

    Ist das soweit ok?? und wie kann ich jetzt die einzelnen Spalten zum Beispiel zusammen führen. Also Spalte 1 und 2 und danach die leere Spalte 2
    löschen?? Und dann überprüfen wenn in spalte 5 ein Datum und und Spalte 6 eine Zeit diese zusammenführen und wenn dort nix steht das gleiche mit Spalte 7 und 8 zu tun??

    Danke für die Hilfe

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „C.Donat“ ()

    C.Donat schrieb:

    und wie kann ich jetzt
    Poste mal beispielhaft, was Du aus der Datei einliest und was dann rauskommen soll, also keine verbale Beschreibung, sondern so etwa:
    Datei:
    1,2,3,4,5
    2,3,4,5,6
    Controls:
    1
    2
    3
    4
    5
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also eingelesen wird eine CSV mit x Zeilen die so aussehen.
    "1,700";"475-8";"Straße Nummer, PLZ Ort";"Name";"Datum1";"Zeit1";"Datum2";"Zeit2";"Datum3";"Zeit3";"Telefon";"Wert1";"Datum Wert2";"bis 01.01.14";"offen";"offen"

    Als ergebniss sollte das rauskommen
    1,700 475-8 Straße Nummer, PLZ Ort Name; Datum; Wert1, Wert2, Wert3, Wert4
    Wobei Wert1 wenn Ja dann Auftrag und wenn Nein leer sein soll.
    Wert2 wenn **.**.14 dann soll das "FSS" sein sonst leer
    Wert3 wenn "-" Dann leer sonst soll es "Beratung" sein
    Wert4 wenn "offen" dann "FM" sonst leer.

    Hoffe das ist verständlich

    C.Donat schrieb:

    Hoffe das ist verständlich
    Das Wenn-dann machst Du selber.
    Im Array einzelwert sind die Werte für jede einzelne Zeile aufgelistet.
    Was soll nun mit diesen Werten passieren?

    VB.NET-Quellcode

    1. Private Sub Durchsuchen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Durchsuchen.Click
    2. Using dlg As New OpenFileDialog
    3. dlg.Filter = ".CSV (*.csv)|*.csv"
    4. If dlg.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
    5. Pfadbox.Text = dlg.FileName
    6. Pfad = dlg.FileName
    7. End If
    8. End Using
    9. End Sub
    10. Private Sub Start_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Start.Click
    11. Dim einzelwert() As String
    12. For Each line As String In IO.File.ReadAllLines(Pfad)
    13. einzelwert = line.Split(";"c)
    14. For i = 0 To einzelwert.Length - 1
    15. einzelwert(i) = einzelwert(i).Trim(""""c)
    16. Next
    17. ' hier einzelwert verarbeiten
    18. Next
    19. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke,

    das bedeutet jetzt das in einzelwert(0) der wert 1,700 steht und in einzelwert(1) der wert 475-8 ??

    nachdem die zellen zusammengeführt und berarbeitet sind sollen diese in Outlook als Kalendereintrag übergeben
    werden mit zum Beispiel Spalte 1 = Betreff und Spalte2 DatumundZeit usw

    C.Donat schrieb:

    das bedeutet jetzt
    dass Du nicht mal schnell rauskriegst, was in Variablen so drin steht.
    Also:
    Klick drauf, Shift+F9:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sorry ich bin totaler anfänger und versuche es mir selbst beizubringen. Wusste nicht das es so eine Übersicht gibt.

    wäre dieser Code richtig um zum Beispiel Spalte1 (1,700) und spalte 2 (475-8) zusammenzuführen??

    VB.NET-Quellcode

    1. Dim t1 As String = " "
    2. Dim einzelwert() As String
    3. For Each line As String In IO.File.ReadAllLines(Pfad)
    4. einzelwert = line.Split(";"c)
    5. For i = 0 To einzelwert.Length - 1
    6. einzelwert(i) = einzelwert(i).Trim(""""c)
    7. Next
    8. t1 = String.Join(t1, einzelwert, 0, 1)
    9. Next


    Wie kommt man in diese Übersicht das man die aktuellen werte sieht wie in deinem Screenshot??

    VB.NET-Quellcode

    1. t1 = Einzelwert(0) & Einzelwert(1)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!