Datei mit gleichen Anfang raussortieren

  • Word

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Datei mit gleichen Anfang raussortieren

    Hallo,
    ich habe ein Problem und zwar:

    Hab ich eine Listbox gefüllt mit dateinamen zb.

    123.txt
    123-Sicherung.txt
    456.txt
    456-Sicherung.txt
    789.txt

    Jetzt soll das Programm aus dieser Listbox alle dateinamen rauslöschen welche eine Sicherungsdatei besitzen + Sicherungsdatei.

    Vielen Dank für Tipps ;)
    Willkommen im Forum.
    Was hast Du denn selber an Code schon erarbeitet? Du musst also einen Dateinamen erkennen und den Namen der dazu passenden Sicherung. Sobald beides in der ListBox drin ist, werden diese gelöscht. Erkennung, Bedingungserfüllung, Löschbefehl. Woran scheitert es?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Ich vermute mal, dass Du alle Dateinamen eines Verzeichnisses ausliest. Wie ist der Name einer normalen Datei? Aufgrund Deiner Beispiele gehe ich davon aus, dass die normale Datei die Zeichenfolge "-Sicherung" nicht enthält. Daher suchst Du Dir alle Listeneinträge raus, die solch eine Zeichenfolge nicht enthalten. Dann bastelst Du Dir codetechnisch den Sicherungsnamen zusammen, indem Du an der passenden Stelle jene Zeichenfolge einbaust. Wenn dieser volle Dateiname in der Liste drin ist, gibt es Datei+Sicherung. Und die werden dann dateitechnisch gelöscht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Ja genau ich lese ein Ordner komplett.
    Die datein werden immer mit einem Datum verpasst sprich normale datei heißt 10.08.2018
    und wenn es eine sicherung gibt heißt diese 10.08.2018-Sicherung.
    Ich möchte herrausfinden von welchen Datein es im Ordner noch keine Sicherung gibt und diese sollten dann in der Listbox übrig bleiben.
    ich würde es wohl so lösen:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Form_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim Items As New List(Of String) 'eine liste für alle Dateien erstellen
    3. For Each f As String In Directory.GetFiles(Application.StartupPath & "\Files")
    4. Items.Add(FileNameExt(f)) 'liste befüllen
    5. Next
    6. Dim removableItems As New List(Of String) 'eine liste für alle Dateien erstellen die ebenso als sicherung vorhanden sind
    7. For i As Integer = 0 To Items.Count - 1
    8. Dim s As String = Items.Item(i)
    9. If s.Contains("-Sicherung") Then ' wenn diese "-Sicherung" enthält"
    10. removableItems.Add(s.Split("-"c)(0) & ".txt") ' dateiname Splitten und dateiname ohne "Sicherung"(erster Teil des Splits) zur removable Liste hinzufügen
    11. removableItems.Add(s) ' kompletten Dateinamen inkl. "-Sicherung" in die Removable Liste packen
    12. End If
    13. Next
    14. For i2 As Integer = 0 To removableItems.Count - 1 ' für jeden eintrag in der Removable Liste, besagten eintrag aus der normalen ItemListe löschen
    15. Items.Remove(removableItems.Item(i2))
    16. Next
    17. For i3 As Integer = 0 To Items.Count - 1 ' die übrig gebliebenen Dateinamen in die Listbox Packen
    18. ListBox1.Items.Add(Items.Item(i3))
    19. Next
    20. End Sub
    21. Public Function FileNameExt(Value As String) As String 'gibt mir von einem Dateipfad ausschließlich den Dateinaamen inkl. der Extension wieder
    22. Dim strg As String = Value.Split("\"c).Last
    23. Return strg
    24. End Function

    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

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

    Nur leider sind wir nicht bei VB.Net, sondern VBA
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Hallo AIRGAMER,
    probier' mal dies:

    Visual Basic-Quellcode

    1. Dim i&, Lst1$(), Lst2$()
    2. With ListBox1
    3. ReDim Lst1(.ListCount - 1)
    4. For i = 0 To UBound(Lst1)
    5. Lst1(i) = .List(i)
    6. Next i
    7. .Clear
    8. For i = 0 To UBound(Lst1)
    9. If Lst1(i) Like "*Sicherung*" = False Then
    10. Lst2 = Filter(Lst1, Left$(Lst1(i), Len(Lst1(i)) - 4) & "-Sicherung.txt", True)
    11. If UBound(Lst2) < 0 Then .AddItem Lst1(i)
    12. End If
    13. Next i
    14. End With
    Gruss,

    Neptun
    Was für eine ListBox ist das? Bei Word bei Entwicklertools ein "Dropdownlisten-Steuerelement? Ist das ein ActiveX-Steuerelement (zu finden bei Entwicklertools -> Vorversionstools)? Oder ist das eine ListBox auf einem UserForm? Die werden alle anders angesprochen, daher die Frage.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Komisch. Hab ein leeres Word-Formular genommen, ein UserForm erstellt, ne ListBox und 2 Buttons draufgehauen. Dann noch Neptuns Code, also insgesamt:

    Visual Basic-Quellcode

    1. Private Sub CommandButton1_Click()
    2. Dim i&, Lst1$(), Lst2$()
    3. With ListBox1
    4. ReDim Lst1(.ListCount - 1)
    5. For i = 0 To UBound(Lst1)
    6. Lst1(i) = .List(i)
    7. Next i
    8. .Clear
    9. For i = 0 To UBound(Lst1)
    10. If Lst1(i) Like "*Sicherung*" = False Then
    11. Lst2 = Filter(Lst1, Left$(Lst1(i), Len(Lst1(i)) - 4) & "-Sicherung.txt", True)
    12. If UBound(Lst2) < 0 Then .AddItem Lst1(i)
    13. End If
    14. Next i
    15. End With
    16. End Sub
    17. Private Sub CommandButton2_Click()
    18. ListBox1.AddItem "123.txt"
    19. ListBox1.AddItem "123-Sicherung.txt"
    20. ListBox1.AddItem "321.txt"
    21. ListBox1.AddItem "432.txt"
    22. ListBox1.AddItem "432-Sicherung.txt"
    23. End Sub

    Sobald ich Button2 drücke, kommen die Testdaten in die ListBox. Sobald ich Button1 drücke, wird alles außer "321.txt" gelöscht, also wie gewünscht. Probier Du es mal an nem leeren Projekt aus, ob das klappt.
    btw: Welches Word hast Du?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.