Songliste bearbeiten

  • Hallo Schnitzel,

    Listview? Oscar und YaeroxXO benutzen keine Listview!
    Wenn ich mir das Beispiel von Oscar ansehe,
    dann finde ich diese Zeile

    Spoiler anzeigen
    [autoit]


    _ArraySort($aOut, 1, 0, 0, 1); Oscar Code
    _ArraySort($aArray, 1, 0, 0, 1); abgewandelt auf das Script von YaeroxXO

    [/autoit]

    Das habe ich auch versucht irgendwie zu integrieren, damit die Arrays vorher sortiert werden.

    Und genau das ist mein Problem. Das klappt nicht! Bin ich da auf dem richtigen Weg?
    Der mit den meisten Plazierungen ist oben! Genau wie bei Oscar nur mit den Titeln!

    Hier der Code v. YaeroxXO (_Arraysort deaktiviert)

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $aTracks
    Local $aArray[1][2]
    Local $aIndexes
    Local $sTracklist

    [/autoit] [autoit][/autoit] [autoit]

    $sTracklist = FileOpenDialog("Select Tracklist...", @ScriptDir, "Tracklist (*.txt)")
    _FileReadToArray($sTracklist, $aTracks)

    [/autoit] [autoit][/autoit] [autoit]

    $sInterpretFile = "Interpreten-1000.txt"

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aTracks) - 1
    $aSplit = StringSplit($aTracks[$i], ";")
    If $i = 1 Then
    $aArray[$i - 1][0] = $aSplit[1] & ";" & $aSplit[2]
    $aArray[$i - 1][1] = $aSplit[2]
    Else
    $aIndexes = _ArrayFindAll($aTracks, $aSplit[2], 0, 0, 0, 0, 2)
    If $aIndexes = -1 Then
    ReDim $aArray[$i + 1][2]
    $aArray[$i - 1][0] = $aSplit[1] & ";" & $aSplit[2]
    $aArray[$i - 1][1] = $aSplit[2]
    Else
    $aArray[$aIndexes][1] = $aArray[$aIndexes][1] + 1
    EndIf
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aArray) - 1
    ;_ArraySort($aArray, 1, 0, 0, 1)
    If $aArray[$i][1] <> "" Then
    $aIndexes = _ArrayFindAll($aArray, $aArray[$i][1], 0, 0, 0, 0, 2)

    [/autoit] [autoit][/autoit] [autoit]

    If UBound($aIndexes) > 0 Then
    ConsoleWrite($aArray[$i][1] & "(" & UBound($aIndexes) & "x)" & @CR & "--------------------" & @CR)
    For $y = 0 To UBound($aIndexes) - 1
    ConsoleWrite($aArray[$aIndexes[$y]][0] & @CR)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $aArray[$aIndexes[$y]][0] = ''
    $aArray[$aIndexes[$y]][1] = ''
    Next
    ;~ For $i = 0 To UBound($aIndexes) - 1
    ;~ FileWriteLine($sInterpretFile, $aArray[$aIndexes[$y]][0] & @CR)
    ;~ Next

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(@CR)
    EndIf
    EndIf
    Next
    ;_FileWriteFromArray($sInterpretFile, ($aArray[$i][1] & "(" & UBound($aIndexes) & "x)" & @CR & "--------------------" & @CR))

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Liebe Grüße
    Ilse ;)

  • Hallo,

    muß mich leider wieder melden.
    Ich erhalte bei manchen Listen leider eine Fehlermeldung.

    Obwohl die Liste mit Trennern alle gleich aufgebaut sind.

    Meldung

    Spoiler anzeigen


    (22) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $aArray[$i - 1][0] = $aSplit[1] & ";" & $aSplit[2]
    $aArray[$i - 1][0] = $aSplit[1] & ";" & ^ ERROR

    Weiß jemand wie man diese Fehlermeldung abfangen kann.

    ;) Ilse

  • Dieses mal bin ich aber beim Thema ^^
    Du musst abfangen ob Stringsplit auch wirklich 2 Ergebnisse liefert
    Z.b. sowas verwenden damit die Zeilen ausgelassen werden in denen sich nicht zwei durch ; getrennte Einträge befinden

    [autoit]

    If not Ubound($aSplit) = 3 then continueloop

    [/autoit]

    PS: Ruhig die Edit Funktion für nutzen, das ist lieber gesehen als 3 Post's hintereinander ;)

  • Egal wie lang ich meine liste durchs kopieren mache, ich kann den Fehler bei mir nicht reproduzieren. Bräuchte dann vll. mal die Originaldatei, außer die Informationen sind dir so wichtig dass du sie nicht teilen magst ^^

    #Edit: Und ja ich bin davon ausgegangen das die Datei fehlerfrei genau nach diesem Schema aufgebaut ist, daher überprüfe ich auch nicht wirklich viel :P

    #Edit2: Ich würde die empfehlen mit Opt('MustDeclareVars', 1) zu arbeiten damit du darauf achtest alle Variablen vorher immer zu deklarieren :) AutoIt kann das, aber andere sprachen nicht ;)

    Grüße Yaerox

    Grüne Hölle

  • Sowas ist meistens die letzte Zeile. Die meisten Leute ( und auch einige Programme. z.B. Excel bei csv Daten ) speichern Dateien immer mit ner Leerzeile am Ende^^

  • Hallo,

    konnte mich leider jetzt erst wieder melden.
    Ich habe mal eine Liste beigefügt die den Fehler verursacht.
    ...continue Loop habe ich deaktiviert.

    Die neue Liste wird nicht generiert!

    Erst mal die neue Songdatei autoit.de/wcf/attachment/22767/

    Hier ist der Code

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $aTracks
    Local $aArray[1][2]
    Local $aArray_BU
    Local $aArray2[1][2]
    Local $aIndexes
    Local $sTracklist
    Local $hFile
    Local $aSplit

    [/autoit] [autoit][/autoit] [autoit]

    $sTracklist = FileOpenDialog("Select Tracklist...", @ScriptDir, "Tracklist (*.txt)")
    _FileReadToArray($sTracklist, $aTracks)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($aTracks) - 1
    ;If not Ubound($aSplit) = 3 then continueloop
    $aSplit = StringSplit($aTracks[$i], ";")
    If $i = 1 Then
    $aArray[$i - 1][0] = $aSplit[1] & ";" & $aSplit[2]
    $aArray[$i - 1][1] = $aSplit[2]
    Else
    ReDim $aArray[$i + 1][2]
    ;If not Ubound($aSplit) = 3 then continueloop
    $aArray[$i - 1][0] = $aSplit[1] & ";" & $aSplit[2]
    $aArray[$i - 1][1] = $aSplit[2]

    [/autoit] [autoit][/autoit] [autoit]

    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $aArray_BU = $aArray

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aArray) - 1
    If $aArray[$i][1] <> "" Then
    $aIndexes = _ArrayFindAll($aArray, $aArray[$i][1], 0, 0, 0, 0, 2)

    [/autoit] [autoit][/autoit] [autoit]

    If UBound($aIndexes) > 0 Then
    ReDim $aArray2[$i + 1][2]
    $aArray2[$i][0] = $aArray[$i][1]
    $aArray2[$i][1] = UBound($aIndexes)
    For $y = 0 To UBound($aIndexes) - 1
    $aArray[$aIndexes[$y]][0] = ''
    $aArray[$aIndexes[$y]][1] = ''
    Next
    EndIf
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArraySort($aArray2, 2, 0, 0, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $hFile = FileOpen("Sortierte_Hitliste.txt", 1)
    For $i = 0 To UBound($aArray2) - 1
    If $aArray2[$i][1] <> "" Then
    $aIndexes = _ArrayFindAll($aArray_BU, $aArray2[$i][0], 0, 0, 0, 0, 2)

    [/autoit] [autoit][/autoit] [autoit]

    If UBound($aIndexes) > 0 Then
    FileWriteLine($hFile, $aArray_BU[$aIndexes[0]][1] & "(" & UBound($aIndexes) & "x)" & @CRLF & "--------------------" & @CRLF)
    For $y = 0 To UBound($aIndexes) - 1
    FileWriteLine($hFile, $aArray_BU[$aIndexes[$y]][0] & @CRLF)
    $aArray_BU[$aIndexes[$y]][0] = ''
    $aArray_BU[$aIndexes[$y]][1] = ''
    Next
    FileWriteLine($hFile, @CRLF)
    EndIf
    EndIf
    Next
    FileClose($hFile)

    [/autoit]

    Die Songliste ist länger, aber schon hier wird kein Ergebnis angezeigt!

    Liebe Grüße
    Ilse ;)

  • Probiers doch bitte mal so und sag uns was in die Console geschrieben wird:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $aTracks
    Local $aArray[1][2]
    Local $aArray_BU
    Local $aArray2[1][2]
    Local $aIndexes
    Local $sTracklist
    Local $hFile
    Local $aSplit

    [/autoit] [autoit][/autoit] [autoit]

    $sTracklist = FileOpenDialog("Select Tracklist...", @ScriptDir, "Tracklist (*.txt)")
    _FileReadToArray($sTracklist, $aTracks)
    For $i = 1 To UBound($aTracks) - 1
    $aSplit = StringSplit($aTracks[$i], ";")
    ;If Ubound($aSplit) <> 3 then continueloop ; kurze variante
    If Ubound($aSplit) <> 3 then ; lange variante für debugging
    ConsoleWrite('Fehler bei Zeile ' & $i & ' mit dem Text: ' & $aTracks[$i] & @LF)
    ContinueLoop
    EndIf
    If $i = 1 Then
    $aArray[$i - 1][0] = $aSplit[1] & ";" & $aSplit[2]
    $aArray[$i - 1][1] = $aSplit[2]
    Else
    ReDim $aArray[$i + 1][2]
    $aArray[$i - 1][0] = $aSplit[1] & ";" & $aSplit[2]
    $aArray[$i - 1][1] = $aSplit[2]

    [/autoit] [autoit][/autoit] [autoit]

    EndIf
    Next
    $aArray_BU = $aArray

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($aArray) - 1
    If $aArray[$i][1] <> "" Then
    $aIndexes = _ArrayFindAll($aArray, $aArray[$i][1], 0, 0, 0, 0, 2)

    [/autoit] [autoit][/autoit] [autoit]

    If UBound($aIndexes) > 0 Then
    ReDim $aArray2[$i + 1][2]
    $aArray2[$i][0] = $aArray[$i][1]
    $aArray2[$i][1] = UBound($aIndexes)
    For $y = 0 To UBound($aIndexes) - 1
    $aArray[$aIndexes[$y]][0] = ''
    $aArray[$aIndexes[$y]][1] = ''
    Next
    EndIf
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArraySort($aArray2, 2, 0, 0, 1)

    [/autoit] [autoit][/autoit] [autoit]

    $hFile = FileOpen("Sortierte_Hitliste.txt", 1)
    For $i = 0 To UBound($aArray2) - 1
    If $aArray2[$i][1] <> "" Then
    $aIndexes = _ArrayFindAll($aArray_BU, $aArray2[$i][0], 0, 0, 0, 0, 2)

    [/autoit] [autoit][/autoit] [autoit]

    If UBound($aIndexes) > 0 Then
    FileWriteLine($hFile, $aArray_BU[$aIndexes[0]][1] & "(" & UBound($aIndexes) & "x)" & @CRLF & "--------------------" & @CRLF)
    For $y = 0 To UBound($aIndexes) - 1
    FileWriteLine($hFile, $aArray_BU[$aIndexes[$y]][0] & @CRLF)
    $aArray_BU[$aIndexes[$y]][0] = ''
    $aArray_BU[$aIndexes[$y]][1] = ''
    Next
    FileWriteLine($hFile, @CRLF)
    EndIf
    EndIf
    Next
    FileClose($hFile)

    [/autoit]
  • Hallo,

    ...die Arbeit, konnte mich gestern nicht mehr melden.

    Das Problem liegt an der txt.Datei.

    Es werden z.B. 10 Stellen gefunden die fehlerhafte Trenner haben.
    Bei einer Songliste v. 1000 ist das schwer zu entdecken.
    Manchmal fehlte der Trenner... oder es sah so aus, dass der Titel fehlte: ...;Abba
    und dann wurde keine Liste generiert.

    Debugging ... und nun klappt jetzt prima.

    DANKE DANKE DANKE

    Liebe Grüße
    Ilse :rock: