aus eins mach zwei

  • Hallo zusammen.

    Ich habe hunderte von Zeilen die wie folgt aussehen: ABBA - Dancing queen.mp3

    Ich möchte nun eine Aufteilung machen in dem was vor dem Minuszeichen steht und dem was hinter dem Minuszeichen steht.
    Nur weiß ich bei besten Willen nicht wie ich das machen soll.

    Hat jemand einen Ansatz für mich?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    Einmal editiert, zuletzt von Alina (22. Juli 2009 um 01:50)

  • 100 mal Dancingqueen :) wäre mir etwas zu monoton
    ich denke mit Stringsplitt kommt da gut zurecht der Trenner kann doch angegeben werden.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Hi,
    bei A-B-B-A - Dancing-Queen.mp3 wirds mit stringsplit aber bitter^^
    Das Problem wurde durch Einführung der ID3-tagsversucht in den Griff zu bekommen...
    ciao
    Andy

  • Hallo.

    @MatthiasG.
    Ob AutoIt ID3-Tags lesen kann, das kann ich leider nicht sagen.

    Meine Daten habe ich nun wie folgt gespeichert, wobei die erste Zeile die Überschriften sind und die zweite Zeile zum Song 43 auf CD 297 gehört.
    Dateiname;Titel;Künstler;Album;Jahr;Genre;Kommentar;Komponist;Bitrate;Frequenz;Dauer;Dateigröße;CD Nr.
    2009_EmilianaTorrini_Jungle_Drum.mp3;Jungle Drum;Emiliana Torrini;./.;2009;Showtunes;./.;./.;128;44100;00:02:13;2 Mb;297

    Die Listen sind schon z. T. fertig. Bin nun am überlegen das ganze irgendwie in eine Datenbank zu stecken, aber mit DB habe ich noch nicht viel Erfahrungennund ich möchte ja auch später noch Playlisten damit erstellen und eine Suchfunktion nach Titel oder Künstler einbauen usw.

    Die ID-3 Tags lese ich aus und gebe sie dann ein bzw. lasse sie auslesen, wenn es denn geht. Leider geht es nur selten, da die meisten nicht vollständig sind :(

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Alina: Zum sortieren etc. ist eine Datenbank genau das richtige!
    Ich hab ein wenig Erfahrung mit SQLite, BugFix hatte mir damals ein prima Beispiel gegeben, Moment, ich krame im Moment ;)

    Edit: Gefunden!

    Spoiler anzeigen
    [autoit]

    #include <SQLite.au3>
    #include <SQLite.dll.au3>

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

    Local $sSQliteDll_Path = _SQLite_Startup() ; gibt den Pfad der SQlite.Dll zurück
    ; Lädt die SQLite.dll
    ; erfordert SQLite3.dll im @ScriptDir oder @SystemDir
    ; Wenn SQLite.dll.au3 included ist, wird die DLL im @SystemDir erstellt.
    ; Sollte das fehlschlagen, wird eine temporäre Datei erstellt, die mit _SQLite_Shutdown() gelöscht wird.

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

    $hSQL = _SQLite_Open(@ScriptDir & '\test.db') ; Öffnen, bzw. wenn nicht vorhanden, Erstellen der DB

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

    ; Erstellen einer Tabelle (einmalig):
    ;~ #cs
    $strCREATE = _
    "CREATE TABLE [Musik] (" & _
    "[id] INTEGER PRIMARY KEY NOT NULL," & _
    "[titel] VARCHAR[50] NULL," & _
    "[interpret] VARCHAR[50] NULL," & _
    "[genre] VARCHAR[30] NULL)"
    If _SQLite_Exec ( $hSQL, $strCREATE ) <> $SQLITE_OK Then ; wenn Fehler
    _Beenden('Fehler CREATE')
    EndIf
    ;~ #ce
    ;~ #cs
    $strINSERT = _
    "INSERT INTO Musik VALUES (1, 'Another One Bytes The Dust', 'Queen', 'Rock');" & _
    "INSERT INTO Musik VALUES (2, 'Another Day In Paradise', 'Genesis', 'Pop');"
    If _SQLite_Exec ( $hSQL, $strINSERT) <> $SQLITE_OK Then ; wenn Fehler
    _Beenden('Fehler INSERT')
    EndIf
    ;~ #ce
    #cs
    ; oder mit _SQLite_INSERT()
    ; Einzel-DS eintragen
    Local $sInsert = "1, 'Another One Bytes The Dust', 'Queen', 'Rock'"
    If _SQLite_INSERT('Musik', $sInsert) <> $SQLITE_OK Then _Beenden('Fehler INSERT')

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

    ; mehrere DS eintragen
    Local $aInsert[2] = ["1, 'Another One Bytes The Dust', 'Queen', 'Rock'","2, 'Another Day In Paradise', 'Genesis', 'Pop'"]
    If _SQLite_INSERT('Musik', $aInsert) <> $SQLITE_OK Then _Beenden('Fehler INSERT')
    #ce

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

    ; Tabelleninhalt in Console ausgeben
    If $SQLITE_OK <> _SQLite_Exec($hSQL, "SELECT * FROM Musik", "_cb" ) Then
    MsgBox(0,"SQLite Error","Error Code: " & _SQLite_ErrCode() & @CR & "Error Message: " & _SQLite_ErrMsg())
    _SQLite_Close() ; schließt die Datenbank
    _SQLite_Shutdown()
    Exit
    EndIf
    _Beenden('Test Ende')
    ; UPDATE ausführen
    MsgBox(0, '', 'Zum Ausführen UPDATE ==> OK')

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

    If _SQLite_Exec( $hSQL, "UPDATE Musik SET interpret = 'Phil Collins' WHERE id = '2';") <> $SQLITE_OK Then
    _Beenden('Fehler UPDATE')
    EndIf
    #cs
    ; oder mit _SQLite_UPDATE(Tabelle, "Feld, neuer Wert", Bedingung)
    If _SQLite_UPDATE('Musik', 'interpret,Phil Collins', 'id = 2') <> $SQLITE_OK Then _Beenden('Fehler UPDATE')
    #ce

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

    ; geänderten Tabelleninhalt in Console ausgeben
    If $SQLITE_OK <> _SQLite_Exec($hSQL, "SELECT * FROM Musik", "_cb" ) Then
    MsgBox(0,"SQLite Error","Error Code: " & _SQLite_ErrCode() & @CR & "Error Message: " & _SQLite_ErrMsg())
    _SQLite_Close()
    _SQLite_Shutdown()
    Exit
    EndIf

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

    _Beenden('Test Ende')

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

    Func _Beenden($MSG)
    _SQLite_Close()
    _SQLite_Shutdown()
    Exit MsgBox(0, 'Ende', $MSG)
    EndFunc

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

    Func _cb($aRow)
    For $s In $aRow
    ConsoleWrite($s & @TAB)
    Next
    ConsoleWrite(@LF)
    EndFunc

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

    Func _SQLite_INSERT($sTable, $saValues, $Delim=',')
    Local $sInsert = ''
    If Not IsArray($saValues) Then
    Local $aValues[1] = [$saValues]
    Else
    Local $aValues = $saValues
    EndIf
    For $i = 0 To UBound($aValues) -1
    Local $splitVal = StringSplit($aValues[$i], $Delim)
    $sInsert &= "INSERT INTO " & $sTable & " VALUES ("
    For $k = 1 To UBound($splitVal) -1
    $sInsert &= "'" & StringStripWS($splitVal[$k], 3) & "'" & ','
    Next
    $sInsert = StringTrimRight($sInsert, 1) & ");"
    Next
    If $SQLITE_OK <> _SQLite_Exec ( -1, $sInsert ) Then
    Return SetError(1,0,1)
    Else
    Return $SQLITE_OK
    EndIf
    EndFunc

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

    Func _SQLite_UPDATE($sTable, $saField_Value, $sWhere=-1, $Delim=',')
    Local $sUpdate = "UPDATE " & $sTable & " SET "
    If Not IsArray($saField_Value) Then
    Local $aValues[1] = [$saField_Value]
    Else
    Local $aValues = $saField_Value
    EndIf
    For $i = 0 To UBound($aValues) -1
    Local $splitVal = StringSplit($aValues[$i], $Delim)
    $sUpdate &= StringStripWS($splitVal[1], 3) & " = '" & StringStripWS($splitVal[2], 3) & "',"
    Next
    $sUpdate = StringTrimRight($sUpdate, 1)
    If $sWhere <> -1 Then $sUpdate &= " WHERE " & $sWhere
    If $SQLITE_OK <> _SQLite_Exec ( -1, $sUpdate ) Then
    Return SetError(1,0,1)
    Else
    Return $SQLITE_OK
    EndIf
    EndFunc

    [/autoit]

    Ich empfehle das sehr, da es sehr einfach ist und wenig Einarbeitung erfordert. Dokumentiert ist es auch noch!

  • @MatthiasG.

    Ich schaue später mal nach. Muss nun erst einmal der weachsenden Bauch untersuchen lassen ;)
    Aber schon jetzt vielen lieben DANK !!!

    Edit: Schaut gut aus. Vielen Dank !!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hmm, wenn du das damit meinst, was ich vermute, dann herzlichen Glückwunsch!
    Auf dass er/sie gesund wird! :)