1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • windows herunterfahren lassen?

    • BugFix
    • 22. Mai 2009 um 14:04
    Zitat von johnnyboyy

    if $time = 5 then

    Du mußt die Zeit ja irgendwoher beziehen ;)
    Verwende doch die Macros (@HOUR, @MIN, @SEC).

  • ListView Probleme

    • BugFix
    • 22. Mai 2009 um 13:59
    Zitat von Sen

    1. Wie kann man erfragen welches "Item" grad aktiv ist? (also markiert) Ohne alle abzufragen?

    _GUICtrlListView_GetItemSelected()

    Zitat von Sen

    2. Wie kann ich den Inhalt speichern/wiederherstellen? (GuiCtrlRead/Write auf die ListView?)

    Verwende z.B. dieses: _GUICtrlListView_Export()

    NB: _GUICtrlListView_GetSelectionMark() gibt den Index des ersten Items von mehreren ausgewählten zurück.

  • windows herunterfahren lassen?

    • BugFix
    • 22. Mai 2009 um 13:53
    Zitat von AutoIt-Hilfe

    Shutdown ( code )
    code: A combination of shutdown codes. See "remarks".
    Remarks

    The shutdown code is a combination of the following values:
    0 = Logoff
    1 = Shutdown
    2 = Reboot
    4 = Force
    8 = Power down
    16= Force if hung
    32= Standby
    64= Hibernate

    Add the required values together. To shutdown and power down, for example, the code would be 9 (shutdown + power down = 1 + 8 = 9).

    Standby or Hibernate are ignored if other codes are set.

    Alles anzeigen
  • XML-Datei: Bereiche Ersetzen (_StringBetween?)

    • BugFix
    • 22. Mai 2009 um 13:49
    Zitat von Korby

    Nun möchte ich gezielt alle Attribute (value) mit neuen Werten belegen.

    Ja, schön und gut ==> entscheidend ist doch Welchen Wert möchtest du Womit ersetzen?
    Du brauchst doch einen Ansatz, z.B.: in <Category3> ersetze value Nr. 2 mit 'XYZ'. Woher kommen die Werte? Ein Array oder Input oder....?

  • csv to excel

    • BugFix
    • 22. Mai 2009 um 13:39

    OK, hier mal ein Anfang. Mußt jetzt nur noch deine Logik einbauen und die Schreibbefehle für Excel. Das sollte aber anhand der vorigen Bsp. kein Problem werden.

    Spoiler anzeigen
    [autoit]

    #include <file.au3>

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

    ; die csv-Datei einlesen
    Local $Array, $PathCSV = @ScriptDir & '\test_csv.txt'
    _FileReadToArray($PathCSV, $Array)

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

    ; im Array an Index 0 steht die Anzahl der Zeilen
    ; an Index 1 steht die Überschrift
    ; somit beginnen die Daten an Index 2

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

    ; das Array durcharbeiten, Variable zum Splitten der Felder erstellen
    Global $aSplit ; Global, damit ByRef darauf zugegriffen werden kann
    ; zum besseren Verständnis erstelle ich hier Variablen für jedes Feld
    ; nicht zwingend notwendig, man kann auch direkt mit den Arrayvariablen arbeiten
    Global $TicketID, $CreateDate, $Submitter, $AssignInd, $AssignGrp, $Descript

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

    For $i = 2 To UBound($Array) -1
    $aSplit = StringSplit($Array[$i], ',')
    $TicketID = $aSplit[1]
    $CreateDate = $aSplit[2]
    $Submitter = $aSplit[3]
    $AssignInd = $aSplit[4]
    $AssignGrp = $aSplit[5]
    $Descript = $aSplit[6]
    ; jetzt die Auswertelogik, hier mal frei erfunden:
    Select
    Case StringInStr($Submitter, 'agent') And $AssignGrp = 'IT' And $Descript = 'admin'
    _AddToGroup('MAC')
    Case StringInStr($Submitter, 'agent') And $Descript = 'admin'
    _AddToGroup('ADMIN')
    ; usw.
    EndSelect
    Next

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

    Func _AddToGroup($Group)
    ; prüfen ob Sheet mit dem Gruppennamen existiert, wenn nicht erstellen
    ; Sheet aktivieren
    ; letzte belegte Zeile ermitteln (meine UDF: _ExcelBookGetWidth() )
    ; in Folgezeile schreiben Werte entsprechend der Variablen aus der For-Schleife: $TicketID, $CreateDate usw.
    EndFunc

    [/autoit]

    Edit: Hab noch was vereinfacht.

  • GUI und User Function

    • BugFix
    • 22. Mai 2009 um 12:15
    Zitat von anfänger

    Zum Zeitpunkt des Speicherns habe ich ja nur eine GUI geöffnet und mit Daten gefüllt.


    Das ist völlig unerheblich, die GUI existiert und du greifst auf diese und deren Controls auch zu, wenn sie nicht sichtbar ist.
    Verwende einfach eineindeutige ID's und Eventzuweisungen, dann hast du die Probleme nicht.
    Deine Arraygestaltung habe ich aber trotzdem nicht nachvollziehen können - allerdings habe ich das Skript auch nicht durchgearbeitet um zu sehen, was wann und wo passiert. ;)

  • csv to excel

    • BugFix
    • 22. Mai 2009 um 12:11

    Na, wenn die Logik steht, brauchst du doch nur in etwa so vorgehen:
    - notwendige Sheets erstellen
    - csv mit _FileReadToArray einlesen
    - anhand deiner Bedingungen das Array Zeile für Zeile abarbeiten
    z.B.
    • 'Auftrag' UND 'Admin' UND 'IT' ? ==> zu Sheet MAC
    • 'Auftrag' UND 'Admin' ? ==> zu Sheet ADMIN
    • nur 'Auftrag' ? ==> zu Sheet separate Gruppe

    Das kannst du über Select-Case oder If-Then-ElseIf -Strukturen gestalten. Das Problem ist wirklich ausschließlich die Logik, wann welcher Eintrag wo zugeordnet wird. Das Schreiben in die Sheets ist dann ein reiner Formalismus.
    Bevor du an die Umsetzung der Kriterien gehst, hilft es vllt., wenn du dir das grafisch per Schnittmengen darstellst und daran die Priorität festlegst. Die Abfrage-Reihenfolge muß dann von der höchsten zur niedrigsten Priorität erfolgen.

  • XML-Datei: Bereiche Ersetzen (_StringBetween?)

    • BugFix
    • 22. Mai 2009 um 11:11
    Zitat von Korby

    Doch ich finde keine "elegante" Möglichkeit Die einzelnen Werte zu ersetzen, jemand eine Idee?


    Das geht "elegant" mit StrRegExpReplace().
    Sag nochmal genau was eingelesen wird (bzw. wie dieser Text aussehen kann, sicher unterschiedlich) und was am Ende übrig bleiben soll. Dann schau ich mal, dass ich dir das in ein schönes RegExp packe. :D

  • GUI und User Function

    • BugFix
    • 22. Mai 2009 um 11:07

    Der Fehler ist hausgemacht:
    Du erstellst 2 GUI, verwendest für beide identische Controlnamen und weist diesen auch noch dieselben Events zu. - Das kann nicht gut gehen.

    Deine Array-Konzept ist auch sehr unklar:
    $Plakate_Array[0][190] <== Array mit nur einer Zeile aber 191 Spalten ? - Ist das beabsichtigt ?
    Warum überhaupt 2D-Array, wenn du nur eine Dimension belegst?

    Und das hier geht auch effizienter:

    [autoit]


    $len4 = StringLen(StringStripWS(GUICtrlRead($Text4),3))
    $len5 = StringLen(StringStripWS(GUICtrlRead($EURO1),3))
    $len6 = StringLen(StringStripWS(GUICtrlRead($EURO2),3))
    $laenge = $len1 + $len2 + $len3 + $len4 + $len5 + $len6
    if $laenge <= 1 Then ;...Fehlerbehandlung
    ; besser:
    If (StringStripWS(GUICtrlRead($Text4),3) = '') Or _
    (StringStripWS(GUICtrlRead($EURO1),3) = '') Or _
    (StringStripWS(GUICtrlRead($EURO1),3) = '') Then ;...Fehlerbehandlung

    [/autoit]
  • GUI und User Function

    • BugFix
    • 22. Mai 2009 um 10:40

    Da solltest du schon den GUI-Teil des Codes mit einstellen, so ist das etwas Rätselraten. (und bitte Tags verwenden)

  • GUI und User Function

    • BugFix
    • 22. Mai 2009 um 10:19
    Zitat von anfänger

    ;Inhalt aus den Textfeldern holen und die Länge bestimmen. Leerzeichen am Anfang und Ende werden abgeschnitten

    Hier bestimmst du nur die Länge des Inhalts, speicherst aber nicht den Inhalt.

    Zitat von anfänger

    msgbox (0,"Achtung speichern","Die eingegebenen Daten für das Plakat werden gespeichert!")

    Ich sehe nicht, dass hier der Inhalt gelesen und gespeichert wird.

  • Inhalt eines ListViews schnell speichern

    • BugFix
    • 22. Mai 2009 um 09:59

    Das zeilenweise Schreiben kostet bei großen Dateien Zeit.
    Besser Inhalt sammeln und auf einmal schreiben:

    [autoit]

    ; ##### Variable um in einem Rutsch in Datei zu schreiben:
    $sToWrite = ''
    For $NextLoop = 0 To _GUICtrlListView_GetItemCount($ListView3) - 1
    $MusicText = _GUICtrlListView_GetItemTextArray($ListView3, $NextLoop)
    $sToWrite &= _
    $MusicText[1] & "|" _
    & $MusicText[2] & "|" _
    & $MusicText[3] & "|" _
    & $MusicText[4] & "|" _
    & $MusicText[5] & "|" _
    & $MusicText[6] & "|" _
    & _GetMusicPathByName($MusicText[1]) & @CRLF
    Next
    $Fopen = FileOpen(@ScriptDir & "\Music2.txt", 2)
    FileWrite($Fopen, StringTrimRight($sToWrite, 2)) ; hier alles auf einmal schreiben
    FileClose($Fopen)

    [/autoit]
  • XML-Datei: Bereiche Ersetzen (_StringBetween?)

    • BugFix
    • 22. Mai 2009 um 09:47

    Alternativ geht auch StringRegExp():

    [autoit]

    $test = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' & @CRLF & _
    '<TEST1>' & @CRLF & _
    '<TEST2>' & @CRLF & _
    '<TEST3 cat="xt4"/>' & @CRLF & _
    '</TEST2>' & @CRLF & _
    '</TEST1>'

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

    $search = StringRegExp($test, 'cat="([^"]+)"/', 1)
    If IsArray($search) Then
    MsgBox(0, '', 'Found: ' & $search[0])
    Else
    MsgBox(0, '', 'Kein Inhalt gemäß Muster')
    EndIf

    [/autoit]
  • csv to excel

    • BugFix
    • 22. Mai 2009 um 09:33

    Hi,
    du hast nun das Ergebnis geposted - ich brauch aber mal eine Zeile der Original.csv. Natürlich keine Echtdaten, nur in der Form etwa:

    Zeile_in_CSV=Feld1,Feld2,Feld3,Feld4,Feld5

    Feld1 = GRUPPE
    Feld2 = BLA
    Feld3 = BLUB
    Feld4 = DIES
    Feld5 = DAS

    Und dann, die Zuordnungen
    - je Gruppe ein Tabellenblatt
    - innerhalb Gruppe Anordnung nach Muster/Sortierung....
    - Auswerteblatt mit Einzel/Summen-Darstellung der Gruppen nach Kriterien..

  • csv to excel

    • BugFix
    • 21. Mai 2009 um 23:37

    Das Problem hier ist sicher nicht die skriptmäßige Umsetzung (das erklärt mein Bsp. bzw. die anderen Funktionen der Excel-UDF), sondern wohl eher die Auswertelogik zu erstellen.
    Ich weiß nicht, woher die Info für die Gruppenzugehörigkeit stammt. Steht das in der csv?
    Wenn alle Daten gemeinsam in einer Datei stehen, mußt du zuerst nach Gruppen sortieren. Anschließend überträgst du jeweils die Daten einer Gruppe auf ein Tabellenblatt. Das Tabellenblatt zur Auswertung enthält dann Formeln, die auf die einzelnen Tabellenblätter verweisen.
    Normale Excel-Formeln halt. Ich häng dir mal noch eine nützliche Funktion zur Bestimmung der belegten Zeilen/Spalten an.

    _ExcelBookGetWidth()
    [autoit]

    ;==================================================================================================
    ; Function: _ExcelBookGetWidth($oExcel [, $iTyp=1 [, $iHeader=1 [, $sCol='A']]])
    ; Description: Gibt die letzte belegte Zeile und/oder Spalte einer Tabelle zurück
    ; Syntax: _ExcelBookGetWidth($oExcel, $iTyp=1, $iHeader=1, $sCol='A')
    ; Parameter(s): $oExcel - Referenz eines geöffneten Excel Objekts
    ; $iTyp - 1=letzte Spalte (Standard); 2=letzte Zeile; 3=Spalte|Zeile
    ; $iHeader - Nummer der Zeile, in der die letzte Spalte gesucht wird
    ; $sCol - Buchstabe der Spalte, in der die letzte Zeile gesucht wird
    ; Return Value(s): Erfolg - letzte Spalte und/oder Zeile
    ; Ist die Zeile oder Spalte leer, wird '0' zurückgegeben
    ; Fehler - 0 und setzt @error:
    ; @error=1 - Objekt existiert nicht
    ; @error=2 - $iTyp oder $iHeader außerhalb des Wertebereichs (1 - 65536)
    ; @error=3 - $sCol außerhalb des Wertebereichs (A - IV)
    ; Requirement(s): $iHeader bzw. $sCol sind durchgängig bis zum letzten Zeilen-/Spaltenelement belegt
    ; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
    ;==================================================================================================
    Func _ExcelBookGetWidth($oExcel, $iTyp=1, $iHeader=1, $sCol='A')
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    If $iTyp < 1 Or $iHeader < 1 Or $iTyp > 65536 Or $iHeader > 65536 Then Return SetError(2, 0, 0)
    $sCol = StringUpper($sCol)
    If StringLen($sCol) = 2 Then
    Local $str = StringSplit($sCol, '')
    If Asc($str[1]) < 65 Or Asc($str[1]) > 73 Then Return SetError(3, 0, 0)
    If Asc($str[2]) < 65 Or Asc($str[2]) > 90 Or _
    (Asc($str[1]) = 73 And Asc($str[2]) > 86) Then Return SetError(3, 0, 0)
    ElseIf StringLen($sCol) > 2 Then
    Return SetError(3, 0, 0)
    EndIf
    If Asc($sCol) < 65 Or Asc($sCol) > 90 Then Return SetError(3, 0, 0)
    Local $sColOut, $iRowOut
    Select
    Case $iTyp = 1 Or $iTyp = 3
    For $i = 65 To 90
    If $oExcel.Activesheet.Range(Chr($i) & $iHeader).Value = '' Then
    If $i = 65 Then
    $sColOut = 0
    Else
    $sColOut = Chr($i-1)
    EndIf
    ExitLoop
    EndIf
    If $i = 90 Then
    For $j = 65 To 73
    For $k = 65 To 90
    If $j = 73 And $k = 87 Then
    $sColOut = Chr($j) & Chr($k-1)
    ExitLoop
    EndIf
    If $oExcel.Activesheet.Range(Chr($j) & Chr($k)).Value = '' Then
    If $k = 65 Then
    $sColOut = Chr($j)
    Else
    $sColOut = Chr($j) & Chr($k-1)
    EndIf
    ExitLoop
    EndIf
    Next
    Next
    EndIf
    Next
    ContinueCase
    Case $iTyp = 2
    For $i = 1 To 65536
    If $oExcel.Activesheet.Range($sCol & $i).Value = '' Then
    $iRowOut = $i -1
    ExitLoop
    EndIf
    Next
    EndSelect
    Switch $iTyp
    Case 1
    Return $sColOut
    Case 2
    Return $iRowOut
    Case 3
    Return $sColOut & '|' & $iRowOut
    EndSwitch
    EndFunc ;==>_ExcelBookGetWidth

    [/autoit]
  • csv to excel

    • BugFix
    • 21. Mai 2009 um 23:14

    Habe zwischenzeitlich schon mal ein allgemeines Muster erstellt:

    [autoit]

    #Include <Excel.au3>
    #include <File.au3>
    Local $csv = @ScriptDir & '\test_x.txt', $aCSV, $split
    _FileReadToArray($csv, $aCSV)
    $oExcel = _ExcelBookNew()

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

    ; in einzelne Zelle (Z2S2) schreiben (aus Datei Zeile1/ zweites Element ==> Vorname)
    _ExcelWriteCell($oExcel, 'NAME', 1, 1)
    _ExcelWriteCell($oExcel, 'VORNAME', 1, 2)
    $split = StringSplit($aCSV[1], ',', 2)
    _ExcelWriteCell($oExcel, $split[1], 2, 2)

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

    ; Tabellenblatt umbenennen
    _ExcelSheetNameSet($oExcel, "Muster_1")

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

    ; nächstes Tabellenblatt aktivieren - wenn kein weiteres da ==> erstellen
    $aSheets = _ExcelSheetList($oExcel)
    If $aSheets[0] = 1 Then _ExcelSheetAddNew($oExcel, "Muster_2")
    _ExcelSheetActivate($oExcel, 2)
    If _ExcelSheetNameGet($oExcel) <> "Muster_2" Then _ExcelSheetNameSet($oExcel, "Muster_2")

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

    ; Daten auf diesem Sheet eintragen
    _ExcelWriteCell($oExcel, 'NAME', 1, 1)
    _ExcelWriteCell($oExcel, 'VORNAME', 1, 2)
    $split = StringSplit($aCSV[3], ',', 2)
    _ExcelWriteCell($oExcel, $split[1], 2, 2)

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

    ; Zellen Formatieren von Sheet 2
    With $oExcel.ActiveWorkbook.Sheets(2)
    .range("A1:B1").Font.Size = 16
    .range("A1:B1").Font.Color = 0xff0000
    .range("A1:B1").Font.Bold = TRUE
    .range("A1:B1").Font.Name = 'Comic Sans MS'
    .range("A1:B1").Interior.Color = 0x8888ff
    Endwith

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

    ; Datei speichern
    ;~ _ExcelBookSave($oExcel)

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

    ; oder Datei speichern unter
    ;_ExcelBookSaveAs($oExcel, 'Speicherpfad')

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

    ; ODER schließen UND speichern
    ;~ _ExcelBookClose($oExcel)

    [/autoit]
  • csv to excel

    • BugFix
    • 21. Mai 2009 um 22:09

    Gib mir mal ein paar Zeilen csv mit Kriterien der Zuordnung - dann mach ich ein Bsp.

  • csv to excel

    • BugFix
    • 21. Mai 2009 um 22:03

    Also du willst die csv zerpflücken und in verschiedene Tabellenblätter die Daten einfügen.
    Das kannst du mit der Excel-UDF tun. Schau dir mal die Befehle an - da findest du, was du brauchst.
    Deine Kriterien zum Aufteilen der Daten mußt du dann nur noch in ein Programm pressen. ;)

  • csv to excel

    • BugFix
    • 21. Mai 2009 um 21:51

    Eine CSV ist doch defacto schon eine Exceldatei - brauchst sie in Excel nur importieren.

  • EuroEditor 3.1.0 Beta-Version

    • BugFix
    • 21. Mai 2009 um 21:26

    3 Threads zu einem Thema ist auch Spam! :thumbdown:

    [Threads zusammengefaßt]

    Und nun bitte Ende der Diskussion - das ist das Skript-Forum. ==> [Thread Closed]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™