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

  • Liestview Formatierung...

    • BugFix
    • 2. Juni 2011 um 09:43
    Zitat von kara2010

    *push*

    gibt es wirklich keine Möglichkeit, zeilen in einer Listview zu überlagern?


    Na du bist ja ein Scherzkeks! Erst stellst du eine html-basierte Frage in einem AutoIt-Forum und pushst dann weil keiner mit deiner Frage was anfangen kann. :wacko:
    Was verstehst du denn unter zeilen in einer Listview zu überlagern ? Wäre hilfreich, wenn du dein Problem nachvollziehbar erklärst. Wir haben inzwischen schon Tuts zur richtigen Fragestellung. Vielleicht liest du das mal zuerst.

  • Frage zu StringRegExpReplace

    • BugFix
    • 1. Juni 2011 um 19:34
    Zitat von shadow667

    Was müsste geändert werden, wenn ich am Zeilenanfang kein Leerzeichen haben möchte?


    Bei mir erscheinen keine Leerzeichen am Zeilenanfang. :wacko:
    Das ist meine Konsolenausgabe:

    Code
    N5 M6 T1 (BOHRER D10)
    N10 G0 G54 X10 Y30 S500 M3
    N15 G0 Z30
    N20 G81 R2 Z-15 F500
    N20 G0 G80 Z300
  • Frage zu StringRegExpReplace

    • BugFix
    • 1. Juni 2011 um 19:13

    Hier noch die Variante für RegExp, damit es nicht zu haarsträubend wird, habe ich den Klammerausdruck zwischengesichert und nach Leerzeicheneinfügen wieder eingesetzt.
    Ich gehe mal davon aus, dass immer nur ein Klammerausdruck enthalten ist, anderenfalls müßte man das noch abändern.

    Spoiler anzeigen
    [autoit]

    Local $s = _
    "N5M6T1(BOHRER D10)" & @CRLF & _
    "N10G0G54X10Y30S500M3" & @CRLF & _
    "N15G0Z30" & @CRLF & _
    "N20G81R2Z-15F500" & @CRLF & _
    "N20G0G80Z300"

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

    $sBraces = StringRegExp($s, '\(.+\)', 1)
    $sOut = StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($s, '\(.+\)', '(1)'), '([A-MO-Z(])', ' $1'), '\(1\)', $sBraces[0])
    ConsoleWrite($sOut & @CRLF)

    [/autoit]
  • Frage zu StringRegExpReplace

    • BugFix
    • 1. Juni 2011 um 18:29

    Wenn du möchtest kannst du es auch ohne RegExp lösen (auch wenn es länger ist)

    Spoiler anzeigen
    [autoit]

    Local $s = _
    "N5M6T1(BOHRER D10)" & @CRLF & _
    "N10G0G54X10Y30S500M3" & @CRLF & _
    "N15G0Z30" & @CRLF & _
    "N20G81R2Z-15F500" & @CRLF & _
    "N20G0G80Z300"

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

    Local $a1 = StringSplit($s, @CRLF, 1)
    Local $aOut[$a1[0]], $tmp = '', $fBraces = False

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

    For $i = 1 To $a1[0]
    $a2 = StringSplit($a1[$i], '')
    For $j = 1 To $a2[0]
    Select
    Case $a2[$j] = '('
    $fBraces = True
    $tmp &= ' ('
    Case $a2[$j] = ')'
    $fBraces = False
    $tmp &= ')'
    Case $fBraces Or $a2[$j] = 'N' Or IsNumber($a2[$j])
    $tmp &= $a2[$j]
    Case Not $fBraces And (Asc($a2[$j]) > 64 And Asc($a2[$j]) < 91)
    $tmp &= ' ' & $a2[$j]
    Case Else
    $tmp &= $a2[$j]
    EndSelect
    Next
    $aOut[$i-1] = $tmp
    $tmp = ''
    Next

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

    _ArrayDisplay($aOut)

    [/autoit]
  • Anfrage Listview und Dateienanzeige

    • BugFix
    • 1. Juni 2011 um 09:24

    Der Weg über _FileListToArray() und anschließendes Einlesen der Arrayitem in ein Listview ist zwar problemlos machbar, ich würde aber trotzdem hier auf das ListBox-Control zurückgreifen, da es speziell auf das Bearbeiten von Dateiauflistungen orientiert ist. Schau dir mal die Funktionen dazu in der Hilfe an, speziell "_GUICtrlListBox_Dir". Als 2.ten Parameter kannst du dort z.B. "\Pfad\*.ini" übergeben.

  • _StringBetween in einem Array ?!

    • BugFix
    • 31. Mai 2011 um 17:11
    Zitat von chip

    StringBetween nutzt RegExp. Just my two cents.


    :P Genau, es benutzt RegExp. Warum dann nicht RegExp direkt verwenden? :whistling:

  • _StringBetween in einem Array ?!

    • BugFix
    • 30. Mai 2011 um 19:17

    Na das kann doch nicht gehen - das RegEx verlangt den puren unbearbeiteten Quelltext! Was meinst du, warum ich in meinem Bsp. die Variable $Quellcode verwendet habe? ;)

  • Meldung auf den Bildschirm bevor Login

    • BugFix
    • 30. Mai 2011 um 18:45

    Oh man - Ihr seid Leichenschänder! :D
    Habt ihr mal auf den letzten Post geschaut?

    Zitat

    Dienstag, 17. Juli 2007, 23:18


    :rofl:

  • _StringBetween in einem Array ?!

    • BugFix
    • 30. Mai 2011 um 18:05
    Zitat von MasterOfTime

    Komisch, der Vorschlag von euch beiden klappt bei mir nicht...


    Getestet habe ich mit dem von dir geposteten Quellcode, alle Schauspieler werden dort herausgefiltert.
    Wie gehts:

    [autoit]

    $arrayActor = StringRegExp($Quellcode, '(?:>)([\w\s]+)(?:</span></a>)', 3)

    [/autoit]


    (?:>) gesucht wird: >, das ?: gibt an, dass dieser Ausdruck nicht Bestandteil des Ergebnisses sein soll
    ([\w\s]+) es sollen Zeichen aus einer Zeichenklasse [ ] besetehend aus Ziffern/Buchstaben a-zA-Z/Unterstrich \w und Leerzeichen \s folgen (min. 1-mal, beliebig oft) ==> das gesuchte Ergebnis
    (?:</span></a>) dem muß folgen (ohne Bestandteil des Ergebnisses zu sein): </span></a>

    Es kann sein, dass du Namen in deinem (anderen) Quellcode hast, die noch andere, hier nicht berücksichtigte Zeichen enthalten, wie z.b. é o.ä. - da müßte dann die Zeichenklasse erweitert werden um diese auch zu berücksichtigen.

  • Dateien auslesen und an Excel übergeben

    • BugFix
    • 30. Mai 2011 um 17:51

    Fehler betrifft Zeile 26, dort wird 'Hostname:' abgefragt. Es kann nun sein, dass deine Hostnamen aus anderen als die in der Gruppe "\w" enthaltenen Zeichen bestehen.
    Ich bin von deiner Vorlage ausgegangen.
    Ändere mal die Zeile 25 zu

    [autoit]

    $ret = StringRegExp($a[$i], '(?:: )(.+)', 1)

    [/autoit]

    Damit sollten auch die abenteuerlichsten Hostnamen erkannt werden.

  • _StringBetween in einem Array ?!

    • BugFix
    • 29. Mai 2011 um 20:20

    Das schreit aber eher nach RegExp. ;)

    [autoit]

    $arrayActor = StringRegExp($Quellcode, '(?:>)([\w\s]+)(?:</span></a>)', 3)

    [/autoit]
  • Wieso funktioniert es nicht? Problem

    • BugFix
    • 29. Mai 2011 um 17:53

    Wenn du nochmal die Fragestellung wegeditierst, gibts 'ne Verwarnung. X(
    Wie soll denn jemand jetzt noch nachvollziehen, worum es ging!

  • TimeStamp - erweitert zu kleiner Versionsverwaltung für (.au3 und .lua) alle Typen

    • BugFix
    • 29. Mai 2011 um 12:04

    Aktuelle Version: "v 1.1" - Einzelheiten s. Post #1

  • AutoIt 3.3.7.xx Beta verfügbar

    • BugFix
    • 29. Mai 2011 um 11:31

    Selbst die Fixes sind, wie sich zeigte, oft nicht zutreffend und erscheinen umgehend wieder bei den Tickets. :wacko:
    Im Moment kann ich den Sinn dieser Betaflut nicht nachvollziehen. Der Inhalt ist da nicht adäquat.

  • Excel: Tabellenblatt in Array einlesen

    • BugFix
    • 29. Mai 2011 um 11:14

    Die Funktion _ExcelReadSheetToArray() macht wohl unter 64bit Probleme. Mir hatte sie in der Form noch nie gefallen und deshalb hatte ich eine eigene Variante erstellt. Diese habe ich jetzt mal noch komplettiert, sodass sie auch unter 64bit läuft und zusätzlich noch etwas komfortabler ist durch gezielte Auswahl eines Sheets (sonst aktuelles Sheet) und mit weniger Parametern derselbe Funktionsumfang gewährleistet wird.
    Ich bevorzuge die Zelladressierung mit Offset, da dies ideal für Schleifen ist. Ist auch einfacher zu händeln, als für jede Zelle die absolute Adresse zusammenzustellen.

    _ExcelSheetToArray
    [autoit]

    ;===================================================================================================
    ; Function Name: _ExcelSheetToArray
    ; Description:: Liest ein Tabellenblatt in ein Array
    ; Parameter(s): $oExcel Referenz auf eine geöffnete Exceldatei
    ; $vSheet Nummer oder Name des Tabellenblattes (Standard: 1)
    ; $sRange Auszulesender Bereich: ":" A1 bis letzte belegte Zelle (Standard)
    ; "SZ:" SpalteZeile bis letzte belegte Zelle
    ; ":SZ" A1 bis SpalteZeile
    ; Requirement(s): __LetterToColNr()
    ; Return Value(s): Erfolg: 2D-Array mit Inhalt des Tabellenblattes
    ; Fehler: @error 1 - $oExcel ist kein Objekt
    ; 2 - übergebener Bereich größer als belegte Zeilen/Spalten
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===================================================================================================
    Func _ExcelSheetToArray(ByRef $oExcel, $vSheet=1, $sRange=':')
    ; by BugFix
    If Not IsObj($oExcel) Then Return SetError(1,0,0)
    $oExcel.ActiveWorkbook.Sheets($vSheet).Select()
    Local $iRowStart = 1, $vColStart = 1
    Local $iRowEnd = $oExcel.Worksheets($vSheet).UsedRange.Rows.Count
    Local $vColEnd = $oExcel.Worksheets($vSheet).UsedRange.Columns.Count
    Local $ret, $sTmp = StringSplit($sRange, ':')
    Select
    Case $sTmp[1] <> '' And $sTmp[2] = ''
    $ret = StringRegExp($sTmp[1], '([a-zA-Z]+)(\d+)', 3)
    $vColStart = __LetterToColNr($ret[0])
    $iRowStart = $ret[1]
    Case $sTmp[1] <> '' And $sTmp[2] <> ''
    $ret = StringRegExp($sTmp[1], '([a-zA-Z]+)(\d+)', 3)
    $vColStart = __LetterToColNr($ret[0])
    $iRowStart = $ret[1]
    $ret = StringRegExp($sTmp[2], '([a-zA-Z]+)(\d+)', 3)
    $vColEnd = __LetterToColNr($ret[0])
    $iRowEnd = $ret[1]
    Case $sTmp[1] = '' And $sTmp[2] <> ''
    $ret = StringRegExp($sTmp[2], '([a-zA-Z]+)(\d+)', 3)
    $vColEnd = __LetterToColNr($ret[0])
    $iRowEnd = $ret[1]
    EndSelect
    If $iRowStart > $iRowEnd Or $vColStart > $vColEnd Then Return SetError(2,0,0)
    Local $aOut[$iRowEnd-$iRowStart +1][$vColEnd-$vColStart +1]
    For $i = 0 To UBound($aOut) -1
    For $j = 0 To UBound($aOut,2) -1
    $aOut[$i][$j] = $oExcel.Range("A1").Offset($i +$iRowStart -1, $j +$vColStart -1).Value
    Next
    Next
    Return $aOut
    EndFunc ;==>_ExcelSheetToArray

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

    Func __LetterToColNr($sLetter) ; === Spaltenadresse zu Nummer
    ; by BugFix
    If Not StringRegExp($sLetter, '[a-zA-Z]{1,2}') Then Return SetError(1,0,-1)
    If StringLen($sLetter) = 1 Then Return Asc(StringUpper($sLetter)) -64
    Return (Asc(StringUpper(StringLeft($sLetter, 1)))-64)*26 + (Asc(StringUpper(StringRight($sLetter, 1)))-64)
    EndFunc

    [/autoit]

    Dateien

    _ExcelSheetToArray.au3 2,9 kB – 497 Downloads
  • Excelfunktionen funktionieren teilweise nicht mehr

    • BugFix
    • 28. Mai 2011 um 19:33
    Zitat von Tweaky

    Da wäre die Definition eines Bereichs sehr sinnvoll.


    OK, dadran soll es nicht scheitern. Ich werde die Funktion dahingehend erweitern.

    Edit:
    So, Funktion nun so erweitert, dass nur bestimmte Bereiche ausgelesen werden können:

    _ExcelSheetToArray
    [autoit]

    ; z.B.
    ; Auslesen "B3:D10": $array = _ExcelSheetToArray($oExcel, 1, 'B3:D10')
    ; Auslesen "A1 bis letzte belegte Zelle": $array = _ExcelSheetToArray($oExcel)
    ; Auslesen "C2 bis letzte belegte Zelle": $array = _ExcelSheetToArray($oExcel, 1, 'C2:')

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

    Func _ExcelSheetToArray(ByRef $oExcel, $vSheet=1, $sRange='A1:') ; $sRange 'A1:' ==> A1 bis Ubound
    ; by BugFix
    If Not IsObj($oExcel) Then Return SetError(1,0,0)
    $oExcel.ActiveWorkbook.Sheets($vSheet).Select()
    Local $iRowStart = 1, $vColStart = 1
    Local $iRowEnd = $oExcel.Worksheets($vSheet).UsedRange.Rows.Count
    Local $vColEnd = $oExcel.Worksheets($vSheet).UsedRange.Columns.Count
    If $sRange <> 'A1:' Then
    Local $ret, $sTmp = StringSplit($sRange, ':')
    If $sTmp[2] <> '' Then
    $ret = StringRegExp($sTmp[2], '([a-zA-Z]+)(\d+)', 3)
    $vColEnd = __LetterToColNr($ret[0])
    $iRowEnd = $ret[1]
    EndIf
    $ret = StringRegExp($sTmp[1], '([a-zA-Z]+)(\d+)', 3)
    $vColStart = __LetterToColNr($ret[0])
    $iRowStart = $ret[1]
    EndIf
    If $iRowStart > $iRowEnd Or $vColStart > $vColEnd Then Return SetError(2,0,0)
    Local $aOut[$iRowEnd-$iRowStart +1][$vColEnd-$vColStart +1]
    For $i = 0 To UBound($aOut) -1
    For $j = 0 To UBound($aOut,2) -1
    $aOut[$i][$j] = $oExcel.Range("A1").Offset($i +$iRowStart -1, $j +$vColStart -1).Value
    Next
    Next
    Return $aOut
    EndFunc

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

    Func __LetterToColNr($sLetter) ; === Spaltenadresse zu Nummer
    ; by BugFix
    If StringLen($sLetter) = 1 Then Return Asc(StringUpper($sLetter)) -64
    Return (Asc(StringUpper(StringLeft($sLetter, 1)))-64)*26 + (Asc(StringUpper(StringRight($sLetter, 1)))-64)
    EndFunc

    [/autoit]
  • Excelfunktionen funktionieren teilweise nicht mehr

    • BugFix
    • 28. Mai 2011 um 19:04

    Mir gefällt diese Funktion sowieso nicht und deshalb hatte ich mir eine geschrieben, die nicht absolut adressiert, sondern relativ zur ersten Zelle (A1) ausliest.
    Teste mal, ob das läuft.

    _ExcelSheetToArray
    [autoit]

    Func _ExcelSheetToArray(ByRef $oExcel, $vSheet=1, $iRowStart=1, $iColStart=1)
    ; by BugFix
    If Not IsObj($oExcel) Then Return SetError(1,0,0)
    $oExcel.ActiveWorkbook.Sheets($vSheet).Select()
    Local $RowCount = $oExcel.Worksheets($vSheet).UsedRange.Rows.Count
    Local $ColCount = $oExcel.Worksheets($vSheet).UsedRange.Columns.Count
    If $iRowStart > $RowCount Or $iColStart > $ColCount Then Return SetError(2,0,0)
    Local $aOut[$RowCount-($iRowStart-1)][$ColCount-($iColStart-1)]
    For $i = 0 To UBound($aOut) -1
    For $j = 0 To UBound($aOut,2) -1
    $aOut[$i][$j] = $oExcel.Range("A1").Offset($i +($iRowStart-1), $j +($iColStart-1)).Value
    Next
    Next
    Return $aOut
    EndFunc

    [/autoit]

    Ich habe Win7 Pro 32bit, da funktioniert ExcelBookClose.

  • Dateien auslesen und an Excel übergeben

    • BugFix
    • 28. Mai 2011 um 15:16
    Zitat von Xethria

    Kannst du mir da bitte helfen, dass die Infos nicht überschrieben werden und in neue Zeilen geschrieben werden?


    Na klar. ;)
    Zum Arbeiten in Schleifen gibt es die geniale Möglichkeit mit Offset zu arbeiten. Somit erspart man sich das mühselige Addressieren anhand Spalte/Zeile mit evtl. Umrechnen etc.
    Mit Offset erreicht man eine relative Addressieung vom Startrange aus. Die Startrange selber wäre Offset(0,0). Es wird adressiert: Offset(+/- Zeilen, +/- Spalten).
    So läufts:

    Spoiler anzeigen
    [autoit]

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

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

    Local $FileList = _FileListToArray("S:\Test\")
    If @error Then Exit MsgBox(0, 'Fehler', 'Dateiliste konnte nicht gelesen werden!')
    Local $a, $pathTXT, $oExcel = _ExcelBookOpen("S:\test.xls")
    Local $lastLine = $oExcel.Worksheets(1).UsedRange.Rows.Count
    If $lastLine = 1 And $oExcel.Range("A1").Value = '' Then $lastLine = 0 ; Tabelle noch leer

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

    For $i = 1 To $FileList[0]
    $pathTXT = "S:\Test\" & $FileList[$i]
    _FileReadToArray($pathTXT, $a)
    If @error Then ContinueLoop
    EXCEL($a, $lastLine +$i)
    Next
    _ExcelBookSave($oExcel)
    _ExcelBookClose($oExcel)
    Exit

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

    Func EXCEL(ByRef $a, $iLine)
    For $i = 1 To $a[0]
    Select
    Case StringInStr($a[$i], 'Hostname:', 1)
    $ret = StringRegExp($a[$i], '(?:: )(\w+)', 1)
    $oExcel.Range("A1").Offset($iLine -1, 0).Value = $ret[0]
    Case StringInStr($a[$i], 'Betriebssystemname:', 1)
    $ret = StringRegExp($a[$i], '(?:: )([\w ]+)', 1)
    $oExcel.Range("B1").Offset($iLine -1, 0).Value = $ret[0]
    Case StringInStr($a[$i], 'Ursprüngliches Installationsdatum:', 1)
    $ret = StringRegExp($a[$i], '(?:: )(\d{2}\.\d{2}\.\d{4}, \d{2}:\d{2}:\d{2})', 1)
    $oExcel.Range("C1").Offset($iLine -1, 0).Value = $ret[0]
    Case StringInStr($a[$i], 'Systemhersteller:', 1)
    $ret = StringRegExp($a[$i], '(?:: )([\w .-]+)', 1)
    $oExcel.Range("D1").Offset($iLine -1, 0).Value = $ret[0]
    Case StringInStr($a[$i], 'Systemmodell:', 1)
    $ret = StringRegExp($a[$i], '(?:: )([\w .-]+)', 1)
    $oExcel.Range("E1").Offset($iLine -1, 0).Value = $ret[0]
    ExitLoop
    Case Else
    ContinueLoop
    EndSelect
    Next
    EndFunc

    [/autoit]
  • _WinGetControls() - Controls eines Fensters auslesen

    • BugFix
    • 28. Mai 2011 um 14:20

    Danke Großvater, das kann sicher ein jeder früher oder später brauchen - deshalb: Gepinnt. :thumbup:

  • IsNumber mit String, der nur Zahlen enthält

    • BugFix
    • 25. Mai 2011 um 18:57
    Zitat von blubbstar

    StringIsDigit


    Viel zu unflexibel, würde nur auf einen String, genau wie angegeben passen. Ich vermute mal, dass dann als nächstes die Frage nach '123.45' oder auch mit Vorzeichen gekommen wär. ;)

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™