Dein Pattern reicht nicht ganz.
Hiermit sollte auch das gehen.
Dein Pattern reicht nicht ganz.
Hiermit sollte auch das gehen.
Hier mal noch eine Version, die flexibel ist (von-bis).
Local $Path = "C:\test\test.xls" ; 'Deine_Excel_Datei'
Local $sheetRead = "Tabelle1" ; "Name_Tabellenblatt_zum_Auslesen"
Local $sheetWrite = "Tabelle2" ; "Name_Tabellenblatt_zum_Schreiben"
Local $ReadRange = "A2:B14" ; der zu lesende Bereich (2 benachbarte Spalten)
Local $aRead = StringSplit($ReadRange, ':', 2)
Local $Col_start = StringRegExp($aRead[0], '\D+', 1)
Local $Row_start = StringRegExp($aRead[0], '\d+', 1)
Local $Row_ende = StringRegExp($aRead[1], '\d+', 1)
Local $Row_count = $Row_ende[0] - $Row_start[0]
Local $sRead, $tmp, $iStart, $iLen
Local $oExcel = ObjCreate('Excel.Application')
$oExcel.Visible = 1
Local $oBook = $oExcel.Workbooks.Open($Path)
For $i = 0 To $Row_count
; === erstes Tabellenblatt auswählen, Werte auslesen
$sRead = $oBook.Sheets($sheetRead).Range($aRead[0]).Offset($i, 0).Value
$tmp = $oBook.Sheets($sheetRead).Range($aRead[0]).Offset($i, 1).Value
$iStart = StringLen($sRead)+2
$iLen = StringLen($tmp)
$sRead &= ' ' & $tmp
; === zweites Tabellenblatt zum Schreiben auswählen und Wert eintragen
$oBook.Sheets($sheetWrite).Range($aRead[0]).Offset($i, 0).Value = $sRead
; === Formatieren
With $oBook.Sheets($sheetWrite).Range($aRead[0]).Offset($i, 0).Characters(1, $iStart-2).Font
.Name = "Arial"
.FontStyle = "Fett"
.Size = 12
EndWith
With $oBook.Sheets($sheetWrite).Range($aRead[0]).Offset($i, 0).Characters($iStart, $iLen).Font
.Name = "Times New Roman"
.Size = 10
.ColorIndex = 3
EndWith
Next
Der einfachste Weg ist immer:
- was du tun willst in einem Makro aufzeichnen
- das Makro in VBA öffnen
Dort siehst du dann die verwendeten Methoden etc.
Wie du siehst, ist die Umsetzung in AutoIt problemlos.
Eine weitere Variante wäre auch noch dieses: Symbiose: Array + Structure = StrucList ; Zugriff kpl. assoziativ
Du siehst: AutoIt - Unendliche Weiten ![]()
Und wie ist das jetzt mit dem Display, kann es wirklich zerplatzen nur durch die 'Eigenwärme' des Notebooks?
Es ist zumindest schwer vorstellbar. Das Amilo wird zwar sowieso recht warm, aber das ist mehr unten mittig (direkt über dem Prozessor) und an der Ausblasöffnung. Zudem ist der Luftspalt am geklappten Display so groß, dass dort kein Wärmestau entstehen kann. Ich vermute eher, das Display war (warum auch immer) auf Spannung montiert ( also nicht Volt, sondern mechanische Verspannung
). Wobei selbst das schwer nachvollziehbar ist. Ich hatte meines schon zerlegt und wenn man nicht gerade irgendein Distancestück zwischenpackt, ist der Einbau ziemlich plan.
Vielleicht hat das Display an einer Seite einen Haarriß gehabt. Wenn du zuklappst und dabei nicht mittig sondern an einer Ecke anfasst, entstehen leichte Torsionskräfte. Könnte dann so enden. Ist aber alles spekulativ.
Das ist gar nicht so ohne, es gibt auch folgende Straßennamen:
"1. Umgehungsstraße 112"
"Peter Lustig Ufer 85 b"
usw.
Ein einfaches Splitten reicht da nicht und für das RegExen muß man ebenso das Ende des Straßennamens finden.
Edit:
Mit folgendem Pattern solltest du eigentlich alle gängigen Straßennamenvarianten abdecken können
Falls Worte wie "Charité" o.ä. auftauchen können, mußte die Group um diese Werte erweitern.
erlischt die Garantie sofort ohne wenn und aber.
Richtig, die Garantie - aber nicht die Gewährleistung. Du kannst z.B. deinen Toaster auseinander bauen, weil er nicht heizt und du vermutest, da sei ein Draht ab (mal als grobes Bsp.). Dann kannst du den nicht funktionierenden Toaster zurückgeben (auseinandergebaut, wie er ist, da du den Fehler nicht gefunden hast) und der Hersteller ist im Rahmen der Gewährleistung zur Nachbesserung verpflichtet.
Es ist ein weit verbreiteter Rechtsirrtum, dass ein Eingriff des Endbenutzers in das Gerät zum Erlöschen der Gewährleistung führt. Das gilt ausschließlich für Garantieleistungen, da diese nicht gesetzlich, sondern freiwillige Leistungen des Herstellers sind, für die er selbstredend eigene Regeln geltend machen kann.
Kannst ja mal Alina dazu befragen, wenn sie wieder on ist. Die ist arbeitsbedingt fit in diesen Dingen und kann dir vermutlich auch die entsprechenden Paragrafen des BGB dazu zitieren. ![]()
So, nun kannst du ja versuchen einen optimierten Such-Alghoritmus zu finden. ![]()
Im Moment qüalst du dich suchend von links oben nach rechts unten. Im ungünstigsten Fall ist das gesuchte Pixel rechts unten. ![]()
Kannst dich ja z.B. mal an einer Bubble-Sort ähnlichen Routine versuchen. Und dann testen wie die Performance der Varianten aussieht.
Aber mobi hat schon recht: in H&Ü hat der Thread nix zu suchen - ich schiebe mal nach OT.
He chip - den Teil mit Lob fürs deutsche Forum nehmen wir aber dankend entgegen. Da ist er schon an der richtigen Adresse. ![]()
Austausch wirst du garnicht bekommen, weil selbst dran rumgebastelt hast. Garantie- und Gewährleistungsverlust hast du damit nur erreicht.
Das gilt aber nicht immer. Die Hersteller schreiben das zwar gern auf ihre Geräte und bringen Siegel an, deren Verletzung angeblich zum Verlust jeglicher Gewährleistung führt. Das ist meines Wissens jedoch nur gültig für freiwillig vom Hersteller gegebene Garantieleistungen, dort kann er natürlich Bedingungen festlegen. Falls Gewährleistungsansprüche geltend gemacht werden sollen (gesetzlicher Gewährleistungszeitraum 6 Monate +18 Monate mit Beweisumkehrlast -- Kunde muß nachweisen, dass Schaden bereits bei Verkauf bestand) sind derartige Herstellerangaben rechtsunwirksam. Sie dienen eigentlich nur zur Abschreckung der Kunden, ihre berechtigten Gewährleistungsansprüche durchzusetzen. ![]()
[OT]
zur Funktion _Array2DSearch()
Seit Prod 3.2.12.0 funktioniert _ArraySearch() auch mit 2D-Array (Suche des ersten Vorkommens eines Wertes) und mit _ArrayFindAll() werden alle Vorkommen eines Suchwertes zurückgegeben.
( Da ist meine Funktion aber flexibler, da sie dies optional beides tut.
)
[/OT]
Ich habe vor ein Gestenprogramm zu schreiben für Windows.
Wenn ich nicht irre, hatten wir das mal hier in einem Wettbewerb. Such mal dort.
Es geht darum, das man auch mal zum Ursprung, zur Mathemathik zurück findet !
Back To The Roots?
Sorry, aber ich bezweifele, dass du die Wurzeln überhaupt kennengelernt hast. Und Mathematik findet im PC nicht wirklich statt. Mal sehr lapidar ausgedrückt: Von der Software wird alles soweit aufbereitet, dass der PC durch Füllen und Leeren von Registern mit Nullen und Einsen wiederum Nullen und Einsen ausgibt. ![]()
Du mußt das Makro @TAB verwenden. ![]()
mist, Umlaute im Dateinamen werden falsch ausgelesen. aus "ändern" wird "Žndern"
Hängt mit ANSII/Unicode zusammen. Hab die Funktion mal um ein Replace ergänzt. Geht am Einfachsten. ![]()
Func _GetLastChgFile($sDirectory)
If Not FileExists($sDirectory) Then Return SetError(1,0,0)
Local $aRepl[7][2] = [["„","ä"],["Ž","Ä"],["”","ö"],["™","Ö"],["","ü"],["š","Ü"],["á","ß"]]
Local $file = @TempDir & '\GetLastChgFile_tmp.txt'
If FileExists($file) Then FileDelete($file)
Local $sCMD = 'DIR ' & $sDirectory & '/A-D-S /O-D /B >>' & $file
RunWait(@ComSpec & " /c " & $sCMD, "", @SW_HIDE)
Local $sLastChg = FileReadLine($file, 1)
For $i = 0 To 6
$sLastChg = StringReplace($sLastChg, $aRepl[$i][0], $aRepl[$i][1])
Next
FileDelete($file)
Return $sLastChg
EndFunc
schade das es keinen funktionierenden debugger gibt
Kannst ja mal dein Glück versuchen mit dem Graphical Debugger von Stumpii. Dazu muß dein PC aber gut "motorisiert" sein. Mit meinem Laptop (1,5 GHZ / 512 MB RAM) bekomme ich das Teil man grade so gestartet, kann dann aber nichts ausführen.
Allerdings da bei hallo das H vorkommt wird sofort auch hallo2 geschrieben wie kann ich das rigentwie ändern?
Probier mal Send im RAW-Modus (Flag=1).
Hab noch eine wesentlich schnellere Variante:
[autoit]Local $sFullPath = 'C:\test'
If FileExists($sFullPath & '\Ergebnis.txt') Then FileDelete($sFullPath & '\Ergebnis.txt')
Local $sCMD = 'DIR ' & $sFullPath & '/A-D-S /O-D /B >>' & $sFullPath & '\Ergebnis.txt'
RunWait(@ComSpec & " /c " & $sCMD, "", @SW_HIDE)
MsgBox(0, 'Zuletzt geänderte Datei', FileReadLine($sFullPath & '\Ergebnis.txt', 2)) ; Zeile 2 deshalb, weil die Ergebnisdatei (die Neuste) hier im selben Ordner liegt
Edit:
Du kannst es auch in eine hübsche Funktion packen. ![]()
Local $sFullPath = 'C:\test'
MsgBox(0, 'Zuletzt geänderte Datei', _GetLastChgFile($sFullPath))
Func _GetLastChgFile($sDirectory)
If Not FileExists($sDirectory) Then Return SetError(1,0,0)
Local $file = @TempDir & '\GetLastChgFile_tmp.txt'
If FileExists($file) Then FileDelete($file)
Local $sCMD = 'DIR ' & $sDirectory & '/A-D-S /O-D /B >>' & $file
RunWait(@ComSpec & " /c " & $sCMD, "", @SW_HIDE)
Local $sLastChg = FileReadLine($file, 1)
FileDelete($file)
Return $sLastChg
EndFunc
Versuch zur Auflistung mal die DOS-Variante. Sollte eindeutig schneller sein.
#include <Constants.au3>
Local $sFullPath = 'C:\test'
Local $sCMD = 'DIR ' & $sFullPath & '/A-D-S /O-D'
Local $foo = Run(@ComSpec & " /c " & $sCMD, "", @SW_HIDE, $STDOUT_CHILD)
Local $data
While True
$data &= StdoutRead($foo)
If @error Then ExitLoop
Sleep(25)
WEnd
Local $ret = StringRegExp($data, "(?:\d{2}\.\d{2}\.\d{4}\s+\d{2}:\d{2}\s+[0-9.]+\s)(.+)", 1)
If IsArray($ret) Then MsgBox(0, 'Zuletzt geänderte Datei', $ret[0])
Ich finde, dass "Volk" sollte auch abstimmen können. 50% Jury und 50% "das "Volk"!
Grundsätzlich finde ich den Gedanken nicht übel - aber du kannst davon ausgehen, dass dann die Wettbewerbskriterien einen geringeren Einfluß in die Bewertung finden. Das "Volk" wird hauptsächlich rein subjektiv nach Geschmack urteilen. Dann sollte man den Einfluß der Jury auf etwa 70% anheben, um das Wettbewerbsziel nicht aus den Augen zu verlieren.
Geht das auch einfacher?
Ja, du brauchst nur eine Variable:
Local $Grp = 1000 ; Startwert
For $i = $Grp To $Grp +2
Send("{Ins}{Enter}")
Send("" & $i & "{Tab}AUTO-IT Gruppe " & $i & "{Tab}3200{Tab}8200{Tab 5}")
Next