Patientenkartei

  • Hallo liebes Forum,
    bin dann nach einem halben Jahr inaktivität auch noch einmal da! :)

    Und zwar geht es sich um diesen Code:

    [autoit]

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

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

    ;~ $Dateiname = InputBox("Dateiname", "Bitte den Dateinamen eingeben!")
    $Dateiname = "Neues Textdokument.txt"
    $Datei = FileOpen($Dateiname)

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

    Global $Array[1]

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

    _FileReadToArray($Dateiname, $Array)
    _ArrayDisplay($Array)

    [/autoit]

    An sich ne runde Sache...

    Nun zu meiner Situation:
    Ich habe eine Patientenkartei, die so aufgebaut ist:

    Neues Textdokument.txt:
    QNR - Statictics
    xxxxxx Mozart, Amadeus PGR 31.08.2010 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 31.08.2010 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 31.08.2010 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 31.08.2010 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 20.10.2011 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 20.10.2011 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 20.10.2011 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 20.10.2011 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 20.10.2011 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 20.10.2011 xxxxxxx
    xxxxxx Pauls, Ludwig PGR 01.12.2011 xxxxxxx

    Erklärung:
    xxxxxx = Individuelle Patientennummer (bei mehreren Behandlungen kann die variieren)
    PGR = irrelevant

    Mein Ziel:
    Ich möchte diese Statistik zusammenfassen!
    Das heißt, dass mein Programm diese Datei verändert, sodass sie nur noch so aussehen würde:

    Neues Textdokument.txt:
    QNR - Statictics
    xxxxxx Mozart, Amadeus PGR 31.08.2010 xxxxxxx
    xxxxxx Mozart, Amadeus PGR 20.10.2011 xxxxxxx
    xxxxxx Pauls, Ludwig PGR 01.12.2011 xxxxxxx

    So kann ich die einzelnen Besuche besser zählen, da jede Behandlung, auch wenn es 5 am Tag sind, aufgelistet werden (s. alte Statistik).


    Ich komm leider nicht mehr weiter.
    Irgendwie habe sich meine AutoIt Kenntnisse verflüchtigt. :rofl:

    Einmal editiert, zuletzt von PokerFace (10. Dezember 2011 um 10:44)

  • Schau dir mal den Befehl an:

    [autoit]

    _ArrayUnique

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Die Zahlen (xxxxx) sind leider nicht immer gleich.
    Also gibt es keine genau gleichen Array Inhalte.
    Dementsprechend sieht mein Array genau gleich aus, wenn ich _ArrayUniqe verwende :(

  • Wie wäre es damit:

    Spoiler anzeigen
    [autoit]

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

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

    Global $dir = @DesktopDir & "\Neues Textdokument.txt"
    Global $lines [1]
    _FileReadToArray($dir,$lines)
    Global $data [$lines [0]+1]

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

    For $x = 1 To $lines [0]
    $data [$x] = StringTrimRight(StringTrimLeft(FileReadLine($dir,$x),7),8)
    Next

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

    $data = _ArrayUnique($data)
    _ArrayDisplay($data)

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

    Musste natürlich noch anpassen, aber denke das ist weniger das Problem.

  • Wow!
    Es klappt.
    Falls du gerade nichts zu tun hast:
    Könntest du eventuell auskommentieren, was das Programm an gewissen stellen macht?
    Also wie wird sortiert?

    Es interessiert mich sehr !

    Edit:
    Das ist der Casus Knacktus :D

    [autoit]

    For $x = 1 To $lines [0]
    $data [$x] = StringTrimRight(StringTrimLeft(FileReadLine($dir,$x),7),8)
    Next
    $data = _ArrayUnique($data)

    [/autoit]
  • Spoiler anzeigen
    [autoit]

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

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

    Global $dir = @DesktopDir & "\Neues Textdokument.txt"
    Global $lines [1]
    _FileReadToArray($dir,$lines)
    Global $data [$lines [0]+1]

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

    For $x = 1 To $lines [0] ; die Schleife durchläuft alle Elemente der ausgelesenen Zeilen der Txt-Datei und schreibt sie in ein neues Array ($lines [0] enthält die Anzahl der Zeilen die er bei _FileReadToArray ausgelesen hat)
    $data [$x] = StringTrimRight(StringTrimLeft(FileReadLine($dir,$x),7),8)
    ; StringTrimLeft kürzt den Text von der linken Seite ausgehend um 7 Zeichen --> entfernt also die Patientennummer der linken Seite
    ; StringTrimRight kürzt den Text von der rechten Seite ausgehend um 8 Zeichen --> entfernt also die Patientennummer der rechten Seite
    Next

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

    $data = _ArrayUnique($data)
    _ArrayDisplay($data)

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

    Hoffe du verstehst es :thumbup:

  • Ich nutze bei sowas meistens SQL, da man da einfach die Tabelle mit einem UNIQUE KEy belegen kann und doppelte automatisch rausfallen.
    Weiterhin musst du die nicht raussuchen, das macht die SQLite Dll, welche um einiges schneller rechnet ;)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    $Timer = TimerInit()
    Global $aResult, $iRows, $iColumns
    _SQLite_Startup()
    _SQLite_Open()
    _SQLite_Exec(-1, "CREATE TABLE Data (Patientennummer1 VARCHAR(100),Nachname VARCHAR(100),Vorname VARCHAR(100),PGR VARCHAR(100),Datum VARCHAR(100), Patientennummer2 VARCHAR(100), UNIQUE(Nachname, Vorname, Datum));")
    $aSql = 'Begin Transaction ;' & @CRLF
    $Dateiname = "Neues Textdokument.txt"
    $Datei = FileOpen($Dateiname, 0)
    $Read = FileRead($Datei)
    $Lines = Stringsplit($Read, @CRLF)
    For $i = 1 TO $Lines[0]
    If $Lines[$i] = "" Then ContinueLoop
    $Split = Stringsplit($Lines[$i], " ")
    $aSql &= "INSERT OR IGNORE INTO Data VALUES('"&$Split[1]&"', '"&$Split[2]&"', '"&$Split[3]&"', '"&$Split[4]&"', '"&$Split[5]&"', '"&$Split[6]&"');" & @CRLF
    Next
    $aSql &= 'Commit Transaction ;' & @CRLF
    _SQLite_Exec(-1, $aSql)
    _SQLite_GetTable2d(-1, "SELECT * FROM Data;", $aResult, $iRows, $iColumns)
    _ArrayDisplay($aResult)
    _SQLite_Close()
    _SQLite_Shutdown()
    $Diff = Timerdiff($Timer)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Diff = ' & $Diff & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

    [/autoit]