Da kannst Du Dich drauf verlassen, dass wir unsere Forenregeln ganz genau nehmen!
[Thread closed]
Beiträge von Oscar
-
-
Alles Gute zum Geburtstag!
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Die Idee ist eigentlich ganz gut. Kann ich hier mal aufräumen...

kostenlos (gegen Porto):
- SCSI DVD-ROM-Laufwerk (Pioneer DVD-U05S, Intern, Slot-In)
- SCSI Hostadapter (Tekram DC-315U, PCI-Karte)
- SCSI Hostadapter (Advance 2911U, PCI-Karte)
- Leadtek TV-Karte (WinFast TV2000 XP, PCI-Karte) inkl. allen Kabeln, Fernbedienung, Software <- es handelt sich bei der Karte um eine alte analoge TV-Karte (nicht DVB fähig)
- Magneto-Optical Drive (Fujitsu Gigamo MCD3130AP)Für 10 € (plus Porto) gibt's:
- Casio PocketViewer PV-S660 (6 MB Speicher) inkl. RS232 DatenkabelFür 5 € (plus Porto) gibt's:
-Creative Soundblaster Audigy 2 ZS (PCI-Karte)
- Zwei 256 MB DDR-RAM-Module (SO-DIMM für Notebook) PC2700, 333 MHz, CL2.5Falls jemand etwas davon gebrauchen kann, einfach eine PN an mich. Bei mehreren Teilen fällt natürlich nur einmal Porto an.
-
Wenn die Excel-Datei nur eine Spalte hat, ja.

Ok, habe ich überlesen, sorry.
-
Warum so kompliziert?
[autoit]
Geht doch auch so:
[/autoit]
#include <Excel.au3>
$oExcel = _ExcelBookOpen(@ScriptDir & '\test.xls')
$aArray = _ExcelReadSheetToArray($oExcel)
_ExcelBookClose($oExcel)
MsgBox(0, 'Anzahl der Zeilen', $aArray[0][0])
MsgBox(0, 'Anzahl der Spalten', $aArray[0][1]) -
SuFu = Suche hier im Forum (rechts oben)
Aber schon mal rein prophylaktisch: Forenregeln lesen!

-
Gibt es keinen Befehl, der in der txt datei erkennt in welcher Reihe das Wort vorkommt, damit ich dann die Reihe in ein Var packen kann, um später mit StringSplit zu arbeiten. Oder gibt es eine Möglichkeit allen Strings von einem Wort bis zu nächsten zu erfassen. An meinem Beispiel also alles zwischen Bestellung und Geliefert, weil manche Kunden, haben mehr bestellt und somit gibt es mehr Reihen.
Es gibt auch noch den Befehl "StringInStr". Damit kannst Du in einem String (der geladenen Textdatei) nach einem anderen String (z.B. "Bestellung") suchen lassen. Als Ergebnis erhälst Du die Position des Suchstrings.
Dann suchst Du noch nach "Geliefert" und schon hast Du die beiden Positionen und kannst den dazwischenliegenden Text mit StringMid extrahieren. -
Deine Beschreibung ist ziemlich dürftig. Gibt es bloß einen Kunden pro Datei?
Wenn ja, dann vielleicht so:
Spoiler anzeigen
[autoit]
[/autoit]
$sDaten = FileRead(@ScriptDir & '\0815v2.txt')
$sKunde = StringRegExpReplace($sDaten, '(?s).*Kunde\t*(.+?)\r.*', '$1')
$sFirma = StringRegExpReplace($sDaten, '(?s).*Firma\t*(.+?)\r.*', '$1')
$sStrasse = StringRegExpReplace($sDaten, '(?s).*Strasse\t*(.+?)\r.*', '$1')
$sOrt = StringRegExpReplace($sDaten, '(?s).*Ort\t*(.+?)\r.*', '$1')
MsgBox(0, 'Kundendaten', $sKunde & @CR & $sFirma & @CR & $sStrasse & @CR & $sOrt) -
Ich hatte mal eine Funktion dazu geschrieben:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; Anfang Beispiel
#include <Array.au3> ; wird nur für _ArrayDisplay benötigt
$sDrive = 'c:'
$Ret = _GetDriveInfo($sDrive)
If IsArray($Ret) Then
_ArrayDisplay($Ret, 'Informationen über Laufwerk "' & $sDrive & '"')
Else
MsgBox(0, 'Fehler', $Ret)
EndIf
; Ende Beispiel;===============================================================================
[/autoit]
; Function Name: _GetDriveInfo($sDrive)
; Description:: Erweiterte Informationen zu einer Festplatte/USB-Stick
; Parameter(s): $sDrive = Laufwerksbuchstabe
; Requirement(s): ---
; Return Value(s): 2D-Array mit Bezeichnung und Wert (siehe Beispiel)
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _GetDriveInfo($sDrive)
$sDrive = StringRegExpReplace($sDrive, '(?i)(.*)([a-z]{1}:)(.*)', '$2')
Local $sDriveType = DriveGetType($sDrive)
If $sDriveType <> 'Fixed' And $sDriveType <> 'Removable' Then SetError(1, 0, 1)
If Not FileExists($sDrive) Then Return SetError(1, 0, 1)
Local $wbemFlagReturnImmediately = 0x10
Local $wbemFlagForwardOnly = 0x20
Local $colItems = ''
Local $aPartition, $aPhysicalDrive, $aOut[14][2]
$objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
If Not IsObj($objWMIService) Then Return SetError(2, 0, 2)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_LogicalDiskToPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If StringInStr($objItem.Dependent, '"' & $sDrive & '"') Then
$aPartition = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
EndIf
Next
Endif
If Not IsArray($aPartition) Then Return SetError(3, 0, 3)
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDriveToDiskPartition', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If StringInStr($objItem.Dependent, '"' & $aPartition[0] & '"') Then
$aPhysicalDrive = StringRegExp($objItem.Antecedent, 'DeviceID="(.*)"', 3)
EndIf
Next
Endif
If Not IsArray($aPhysicalDrive) Then Return SetError(4, 0, 4)
$aPhysicalDrive[0] = StringReplace($aPhysicalDrive[0], '\\', '\')
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_DiskDrive', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
If StringInStr($objItem.DeviceID, $aPhysicalDrive[0]) Then
$aOut[0][0] = 'Volume-Label'
$aOut[0][1] = DriveGetLabel($sDrive)
$aOut[1][0] = 'Serial-Nr. (Volume)'
$aOut[1][1] = DriveGetSerial($sDrive)
$aOut[2][0] = 'Model'
$aOut[2][1] = $objItem.Model
$aOut[3][0] = 'Serial-Nr. (Drive)'
$aOut[3][1] = StringMid($objItem.PNPDeviceID, StringInStr($objItem.PNPDeviceID, '\', 0, -1) + 1)
$aOut[3][1] = StringReplace($aOut[3][1], '&0', '')
$aOut[4][0] = 'Interface'
$aOut[4][1] = $objItem.InterfaceType
$aOut[5][0] = 'Size (Bytes)'
$aOut[5][1] = $objItem.Size
$aOut[6][0] = 'Media Type'
$aOut[6][1] = StringRegExpReplace($objItem.MediaType, '[^[:print:]]', ' ')
$aOut[7][0] = 'Total Cylinders'
$aOut[7][1] = $objItem.TotalCylinders
$aOut[8][0] = 'Total Heads'
$aOut[8][1] = $objItem.TotalHeads
$aOut[9][0] = 'Total Tracks'
$aOut[9][1] = $objItem.TotalTracks
$aOut[10][0] = 'Total Sectors'
$aOut[10][1] = $objItem.TotalSectors
$aOut[11][0] = 'Tracks Per Cylinder'
$aOut[11][1] = $objItem.TracksPerCylinder
$aOut[12][0] = 'Sectors Per Track'
$aOut[12][1] = $objItem.SectorsPerTrack
$aOut[13][0] = 'Bytes Per Sector'
$aOut[13][1] = $objItem.BytesPerSector
EndIf
Next
Endif
$objWMIService = ''
Return $aOut
EndFunc -
Ja, habe ich auch bekommen und hatte es bereits an Pee gemeldet gehabt, der den User dann auch gleich entfernt hat.
-
Wow! Sieht klasse aus.
Musste allerdings die Auflösung niedriger einstellen. Die 1920x1200 von meinem 24er sind dann doch etwas viel für das Skript.
-
Bei meinem Win7-Rechner bekomme ich immer einen Absturz, auch mit den Änderungen aus Post#29. Sowohl als 32Bit-Exe, als auch als Skript.

Auf meinem WinXP-Rechner (32 Bit) hingegen funktioniert das Skript einwandfrei. Sieht übrigens toll aus.

Edit: funkey: wie hast Du das getestet? Einfach ein "Return" an den Anfang der Funktion? Das funktioniert bei mir trotzdem nicht.
-
Gibt bei mir einen Absturz von AutoIt:
Zitat
Assembler Bytecode: 0x559BDBE38B6C2408DD4510DD4518DD4500DD4508D9C1D9C18B7D288B452C8B5D30F7E3C1E00201F889C3B800000000B9000000008B55208B7538EB2DB8000000005253890731D2BBFF000000F7F38B453CC1E20201C28B420189065B5A83C70483C60439DF75D35DC3DDD8DDD8D9C3DEC2B8000000003B4D2C7C1EB9000000009BDD7540608B4534FFD061DD6540D9C2DEC1DD4500D9CADDD841D9C1D9C1D9C1D8C8D9C1D8C8DEE9D8C4D9CADEC9D8C0D8C2D9C0D8C8D9C2D8C8DEC1DB5D209B3955200F8778FFFFFF3B45240F876AFFFFFF40EBC9
!>16:59:46 AutoIT3.exe ended.rc:-1073741819
>Exit code: -1073741819 Time: 4.828Prozessor: AMD Phenom II X4 940 (4x3.0 GHz, nicht übertaktet)
Betriebssystem: Win7 64 Bit (4 GByte DDR-2 RAM) -
Das kann ich nicht bestätigen. Bei mir läuft das einwandfrei immer 5 sekunden (Abweichung im Millisekundenbereich).
hab das Skript noch etwas angepasst, um wirklich nur die Sleepzeit zu messen:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
_zeit()
$timer=TimerInit()
Sleep(5000)
ConsoleWrite(TimerDiff($timer)&" milliseconds"&@CRLF)
_zeit()$dll=DllOpen("kernel32.dll")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_zeit()
$timer=TimerInit()
DllCall($dll,"none","Sleep","dword",5000)
ConsoleWrite(TimerDiff($timer)&" milliseconds"&@CRLF)
_zeit()Func _zeit()
[/autoit]
ConsoleWrite(@MIN & ":" & @SEC & @CRLF)
EndFunc -
Andy: Bei den UDFs am besten immer das Handle (nicht die Control-ID) benutzen, dann klappt das auch.

Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <GuiMenu.au3>;right click on gui to bring up context Menu.
[/autoit] [autoit][/autoit] [autoit]
GUICreate("My GUI Context Menu", 300, 200)
$button = GUICtrlCreateButton("Set Item4", 50, 50)$context = GUICtrlCreateContextMenu(-1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$item6 = GUICtrlCreateMenu("Items", $context)
$item6_1 = GUICtrlCreateMenuItem("Item1", $item6, 0, 1)
$item6_2 = GUICtrlCreateMenuItem("Item2", $item6, 1, 1)
$item6_3 = GUICtrlCreateMenuItem("Item3", $item6, 2, 1)
$item6_4 = GUICtrlCreateMenuItem("Item4", $item6, 3, 1)
GUICtrlSetState($item6_1, $gui_checked) ;Item1 bekommt MarkierungGUISetState()
[/autoit] [autoit][/autoit] [autoit]; Run the GUI until the dialog is closed
[/autoit] [autoit][/autoit] [autoit]
While 1
$msg = GUIGetMsg()If $msg = $GUI_EVENT_CLOSE Then ExitLoop
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
If $msg = $button Then
;~ GUICtrlSetState($item6_4, $gui_checked);Item3 bekommt Markierung, aber die schon bestehende Markierung bleibt
_GUICtrlMenu_CheckRadioItem(GUICtrlGetHandle($item6), 0, 3, 3) ; bei den UDFs am besten immer das Handle benutzen
;~ GUICtrlSetState($item6_4, $MFT_RADIOCHECK ) ;Item wird in fetter Schrift dargestellt
;GUICtrlSetState($item6_4, $MFS_CHECKED ) ;funktioniert nicht
EndIfWEnd
[/autoit]
GUIDelete() -
Vor allem: existiert das Zielverzeichnis?
_FTP_FilePut() erstellt das nämlich nicht. -
Ohne Skript können wir Dir da kaum helfen.

-
XovoxKingdom: an sich schön erklärt, nur diese Zeile
[autoit]Sleep(10); damit der Prozessor sich nicht überarbeitet
[/autoit]
ist in einer GUIGetMsg-Schleife überflüssig bzw. sogar kontraproduktiv (weil GUIGetMsg in dieser Zeit nicht abgefragt wird).
Die Prozessorlast wird im MessageLoop-Modus automatisch geregelt:ZitatThis function automatically idles the CPU when required so that it can be safely used in tight loops without hogging all the CPU.
Beim OnEvent-Mode hingegen ist der Sleep-Befehl wichtig, weil dort in der Endlosschleife sonst der Prozessor ausgelastet würde.
-
Schau Dir mal die Funktionen (_GUICtrlAVI...) aus der "GuiAVI.au3" an.
-
Es gibt mal wieder eine neue Version (Post #1).
Änderungen: siehe History!