Vokabeln sortieren | *hirn tot*

  • hey,

    irgendwie komm ich mir grad ziemlich verblödet vor xD

    eigendlich ja keine schwere aufgabe eine liste zu sortieren...

    aber ich glaub momentan bin ich dank schule (7:45 -16:30) 60 min pause ist mit zusatz stunden gefüllt -.- (dafür hasse ich meinen headmaster)

    irgendwie hirntot wenn ich zuhause ankomm...

    grad 3 std an diesem scheiß gesessen xD

    ergebnis:
    crap

    Spoiler anzeigen
    [autoit]


    #Include <File.au3>
    #Include <array.au3>
    dim $array,$tmp_def,$def
    _FileReadToArray("test.txt",$array)
    dim $array2[1]
    _ArrayDisplay($array)

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

    for $i = 1 to $array[0]
    if StringInStr($array[$i],"(") Then

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

    if $i > 2 then _arrayadd($array2,$array[$i-2]) ; übersetzung von der vokabel davor
    _ArrayAdd($array2,$array[$i-1]) ; vokabel
    if $i > 2 then
    for $b = $tmp_def to $i-2
    $def = $def &$array[$b]
    Next
    _arrayadd($array2,$def)

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

    $tmp_def = $i
    EndIf
    EndIf

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

    Next
    _ArrayDisplay($array2)

    [/autoit]

    was ich versuche:
    ich lese ein txt datei mit dem format ein:

    Spoiler anzeigen

    und will nun alles in eine array sortieren,

    bsp:

    $array2[1] = vokabel
    $array2[2] = Englische Definiton
    $array2[3] = übersetzung
    $array2[4] = vokabel
    usw...

    thx

  • Wenn pro Zeile eine Erklärung enthalten ist, so wie in meinem Spoiler und nicht in deinem, dann sehe ich kein Problem, anders schon.

    Spoiler anzeigen
  • das ist die line im ausgangstext wo die vokabel steht ;)

    daran hatte ich mic hja auch orientiert, war nur zu blöd alles in code zu packen

    stringinstr hatte ich ja genutzt um mir immer einen fixpoint für die variable zu suchen

    weil

    zeile mit "(" - 1 = vokabel
    - 2 =übersetzung der vokabel davor

    alles zwischen der letzten vokabek und der letzten übersetzung = definition

    tja so weit so gut xD

    • Offizieller Beitrag

    Ich habe mal eine Lösung erstellt:

    Spoiler anzeigen
    [autoit]


    #include<Array.au3>
    #Include <File.au3>
    Global $aFile
    _FileReadToArray(@ScriptDir & '\test.txt', $aFile)
    Global $aOut[1][3], $i = 0, $j = 0
    For $i = 1 To $aFile[0]
    $pos = StringInStr($aFile[$i], '(l.')
    If $pos Then
    ReDim $aOut[$j+1][3]
    $aOut[$j][0] = $aFile[$i-1]
    $next = _Search($i+1)
    $aOut[$j][1] = ''
    For $y = $i+1 To $next-2
    $aOut[$j][1] &= $aFile[$y]
    Next
    $aOut[$j][2] = $aFile[$next-1]
    $j += 1
    EndIf
    Next

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

    _ArrayDisplay($aOut)

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

    Func _Search($start)
    For $x = $start To $aFile[0]
    If StringInStr($aFile[$x], '(l.') Then ExitLoop
    Next
    If $x < $aFile[0] Then $x -= 1
    Return $x
    EndFunc

    [/autoit]

    So klappt es zumindest mit Deinem Test-Text. :)

  • hi oscar, genau sowas hab ich mir gedacht gehabt ^^

    aber mal ne allgemeine frage die mich schon öfters interressiert hat,

    wie kann man die anzahl der elemente einer array eigendlich herausfinden?

    • Offizieller Beitrag

    Wenn das Array existiert, dann funktioniert UBound() auch.
    Falls Du das für das obige Script haben willst, dann musst Du mit $j=1 anfangen:

    Spoiler anzeigen
    [autoit]


    #include<Array.au3>
    #Include <File.au3>
    Global $aFile
    _FileReadToArray(@ScriptDir & '\test.txt', $aFile)
    Global $aOut[1][3], $i = 0, $j = 1
    For $i = 1 To $aFile[0]
    $pos = StringInStr($aFile[$i], '(l.')
    If $pos Then
    ReDim $aOut[$j+1][3]
    $aOut[$j][0] = $aFile[$i-1]
    $next = _Search($i+1)
    $aOut[$j][1] = ''
    For $y = $i+1 To $next-2
    $aOut[$j][1] &= $aFile[$y]
    Next
    $aOut[$j][2] = $aFile[$next-1]
    $j += 1
    EndIf
    Next
    $aOut[0][0] = UBound($aOut)-1
    _ArrayDisplay($aOut)

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

    Func _Search($start)
    For $x = $start To $aFile[0]
    If StringInStr($aFile[$x], '(l.') Then ExitLoop
    Next
    If $x < $aFile[0] Then $x -= 1
    Return $x
    EndFunc

    [/autoit]
  • mal einfach nur so ne frage:
    Wiso willst du das mit den Vokabeln nicht so lösen? :

    $array[0][0] = Vokabel
    $array[0][1] = englische Definition
    $array[0][2] = Übersetzung

    usw... wäre das net einfacher? Ups, hab mich verlesen das Problem liegt wohl eher daran den "String" zu splitten oder?

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D