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

  • Array Element anhand des Inhaltes löschen?

    • BugFix
    • 12. November 2010 um 15:36
    Zitat von tkausl

    Nun, FALS in 0 der Zähler steht ^^


    Es war ja auch keine allgemeine Falldiskussion, sondern eine auf einem Skriptbsp. basierende Frage. Somit stand außer Frage, dass der Zähler in [0] ist. Aber genug der Scharmützel - soll der Threadstarter erstmal seinen Senf dazugeben oder zufrieden sein. :rofl:

  • Inventarliste erstellen MySQL Datenbank

    • BugFix
    • 12. November 2010 um 15:29
    Zitat von hela

    eingebe bekomme ich nur die spaltennamen angezeigt


    Ja, die Bedingung gehört natürlich dazu. Ohne Where-Klausel wird natürlich nichts selektiert. Du brauchst also eine Bedingung, die für alle Datensätze zutrifft. Da ID nicht NULL sein kann verwende einfach dieses:

    SQL
    SELECT `ID`, `Inventarnummer`, `Hersteller` FROM `uebersicht` WHERE `ID` NOT NULL
  • Inventarliste erstellen MySQL Datenbank

    • BugFix
    • 12. November 2010 um 15:10

    Dein SQL-Abfragestring sollte wohl eher so aussehen:

    SQL
    SELECT `ID`, `Inventarnummer`, `Hersteller` FROM `uebersicht`
  • Array Element anhand des Inhaltes löschen?

    • BugFix
    • 12. November 2010 um 15:00
    Zitat von tkausl

    Die Löschfunktion ist Korrekt.


    ;) Vergleich mal meine Version mit deiner. Fällt dir was auf? Ist zwar nicht elementar, aber sinnlos: Du vergleichst auch das Element [0] - den Zähler. Außerdem ist es sinnvoll nach Erfolg die Schleife zu verlassen. Ausnahme: mehrfaches Vorkommen desselben Wertes ist möglich.
    Btw: Wenn du rückwärts iterierst, ist es völlig wurscht ob du als Startwert UBound($array)-1 oder $array[0] verwendest. Der jeweils aktive Index kann nicht wieder vorkommen, da heruntergezählt wird.

  • _GetMinMaxNumber kleinsten, größten Wert aus Singlevariablen und/oder 1D-Arrays ermitteln

    • BugFix
    • 12. November 2010 um 14:50
    Zitat

    Eigentlich meine ich, dass du ein String oder ein Array übergibst und du z.B. die 7 größte oder 4 kleinste Zahl haben willst .


    Klar läßt sich das machen, wäre aber eine völlig andere Aufgabenstellung.
    Hier wollte ich wirklich nur aus verschiedenen Quellen den kleinsten/größten Wert selektieren und das ohne extra Funktionen (wie _ArrayMin ..Max) zu bemühen.

    Edit:
    Jetzt verstehe ich erst, was du wirklich meinst: ..die siebtgrößte oder viertkleinste Zahl.. :D
    Mal schauen, kann ich ja noch erweitern.

  • Array Element anhand des Inhaltes löschen?

    • BugFix
    • 12. November 2010 um 14:36

    Soweit ich das sehe, ist die Löschfunktion nicht korrekt (führt aber nicht zum Fehler).
    Ansonsten solltest du dir mal: _FileWriteFromArray() anschauen.

    [autoit]


    Func _ArrayDeleteInhalt(ByRef $array, $inhalt)
    For $i = Ubound($array) - 1 to 1 Step -1
    If $array[$i] = $inhalt Then
    _ArrayDelete($array, $i)
    ExitLoop()
    EndIf
    Next
    EndFunc

    [/autoit]
  • Word aus 2 Byte erstellen fehlerhaft

    • BugFix
    • 12. November 2010 um 14:25

    Ahh, Danke an Euch.
    Klar, ist ja logisch - "Word = unsigned 16 Bit integer" :whistling:
    Eigentlich sollte Word ausreichen, aber es kann nicht schaden, die Funktion flexibel zu halten.

  • Inventarliste erstellen MySQL Datenbank

    • BugFix
    • 12. November 2010 um 14:18
    Zitat von hela

    gibt es nicht eine funktion wo man die datenbank ausdrucken/ausgeben lassen kann. suche schon die ganze zeit aber finde nichts.

    Also DIE Datenbank als solches gibt es ja nicht. ;) Das ist eine Ansammlung von Tabellen, die auf verschiedene Weise miteinander verknüpft werden. Dir nützt es sicher wenig jede Tabelle einzeln auszugeben. Sondern es soll ja dann z.B. rauskommen: Ausgabe aller Artikel, die dem Kunden X verkauft worden. Dazu mußt du natürlich eine SQL-Abfrage starten, die alle erforderlichen Infos aus den einzelnen Tabellen herausfiltert.

  • _GetMinMaxNumber kleinsten, größten Wert aus Singlevariablen und/oder 1D-Arrays ermitteln

    • BugFix
    • 12. November 2010 um 13:54
    Zitat von UEZ

    Warum hast du nicht das Ganze allgemein gehalten, also z.B. für die n größte bzw. kleinste Zahl?

    Meinst du das jetzt in Bezug auf die Anzahl zu übergebender Parameter? - Die Anzahl ist ja nur dann 'unbegrenzt', wenn ich Werte in einem Array übergebe, dann kann ich wiederum nur eines (oder definierte Anzahl) übergeben.
    Falls du das auf die Funktion selbst beziehst (2 Funktionen in einer), so tat es mir einfach in der Seele weh, 2-mal absolut identische Funktionen zu schreiben, die sich nur durch Vergleichsoperatoren unterscheiden. Und das '+' zur Anwahl von Max halte ich für logisch nachvollziehbar. Es ist programmiertechnisch sicher nicht der edelste Stil - aber auch nicht unbedingt grottig. ;)

  • Word aus 2 Byte erstellen fehlerhaft

    • BugFix
    • 12. November 2010 um 13:44

    Auch wenn es selten ist: Heute habe auch ich mal eine Frage. :D
    Hat jemand eine Erklärung für dieses Problem:
    Wenn ich eine Variable vom Typ 'Word' aus deren Lo- und HiByte erstelle, erhalte ich korrekte Werte nur für positive Word.
    Wo steckt da der Fehler? Habe es extra mit zwei völlig verschiedenen Methoden zur Erstellung der Word-Variable probiert. Das Ergebnis ist identisch.
    (Wofür man sowas braucht? Nun, z.B. werden Tastaturinfos auf Wordbasis übermittelt mit getrennten Werten im LoByte und HiByte.)

    Spoiler anzeigen
    [autoit]

    #cs
    WORD LOBYTE HIBYTE
    513 1 2
    258 2 1
    -2 254 255
    -257 255 254
    #ce

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

    Local $aByte[4][3] = [[513,1,2],[258,2,1],[-2,254,255],[-257,255,254]]

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

    For $i = 0 To 3
    ConsoleWrite('_MakeWord_1 [' & $aByte[$i][1] & ', ' & $aByte[$i][2] & '] erwartet: ' & $aByte[$i][0] & ', Func: ' & _MakeWord_1($aByte[$i][1], $aByte[$i][2]) & @CRLF)
    ConsoleWrite('_MakeWord_2 [' & $aByte[$i][1] & ', ' & $aByte[$i][2] & '] erwartet: ' & $aByte[$i][0] & ', Func: ' & _MakeWord_2($aByte[$i][1], $aByte[$i][2]) & @CRLF & @CRLF)
    Next

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

    Func _MakeWord_1($iLo, $iHi)
    Return BitOR(BitShift($iHi, -8), BitAND($iLo, 0xFF))
    EndFunc

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

    Func _MakeWord_2($iLo, $iHi)
    Local $tWord = DllStructCreate("WORD")
    Local $tBytes = DllStructCreate("BYTE;BYTE;", DllStructGetPtr($tWord))
    DllStructSetData($tBytes, 1, $iLo)
    DllStructSetData($tBytes, 2, $iHi)
    Return DllStructGetData($tWord, 1)
    EndFunc

    [/autoit]
  • _GetMinMaxNumber kleinsten, größten Wert aus Singlevariablen und/oder 1D-Arrays ermitteln

    • BugFix
    • 12. November 2010 um 10:56

    Hiermit lassen sich Min/Max -Werte aus bis zu 10 Einzelvariablen und/oder 1D-Arrays ermitteln. Die Werte können als echte 'Number' oder als Zahlenstring vorliegen. Nichtnumerische Werte und Nicht-Zahlenstrings werden ignoriert. Ausschließlich für den ersten Wert muß (sofern kein Array übergeben wird) zwingend ein Number/Zahlenstring übergeben werden, da dieser als erster Vergleichswert genutzt wird und nicht übergangen werden kann.
    Da Number() eine Funktionslücke aufweist, verwende ich die Funktion in Kombination mit einer eigenen IsNumber/Digit/Float -Prüfung.
    Um Parameter zu sparen, habe ich den Parameter für Array-StartIndex 'vergewaltigt', sodass ohne Vorzeichen die Funktion als MinNumber und mit '+' die Funktion als MaxNumber arbeitet. ;)

    Spoiler anzeigen
    [autoit]

    Local $a[5] = [3,2,8,78,9]
    Local $a1[1] = [-1]
    Local $a2[4] = [40,3,22,12]

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

    ; === erster Parameter für Min und Startindex der Arrays ==> hier also: 0
    ConsoleWrite('Min: ' & _GetMinMaxNumber(0, $a2, 12, $a1, 5, 7, $a) & @CRLF)
    ; === erster Parameter für Max und Startindex der Arrays ==> hier also: '+0'
    ConsoleWrite('Max: ' & _GetMinMaxNumber('+0', $a2, 12, $a1, 5, 7, $a) & @CRLF & @CRLF)

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

    ; === Arrays mit Startindex 1
    Local $a[5] = [4,56,78,23,47]
    Local $a1[3] = [2,352,-98]
    Local $a2[2] = [1,117]
    ConsoleWrite('Min: ' & _GetMinMaxNumber(1, $a, $a1, $a2) & @CRLF)
    ConsoleWrite('Max: ' & _GetMinMaxNumber('+1', $a, $a1, $a2) & @CRLF & @CRLF)

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

    ; === ohne Array ist erster Parameter nur für Wahl Min ('') oder Max ('+')
    ConsoleWrite('Min: ' & _GetMinMaxNumber('', '4', 8, 1+1+3, 12, '3.25', 5, 7, 'Text-String_wird_ignoriert') & @CRLF)
    ConsoleWrite('Max: ' & _GetMinMaxNumber('+', '4', 8, 1+1+3, 12, '3.25', 5, 7, 'Text-String_wird_ignoriert') & @CRLF)

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _GetMinMaxNumber
    ; Description ...: Ermittelt den kleinsten Zahlenwert aus bis zu 10 übergebenen Einzelvariablen und/oder 1D-Arrays
    ; Syntax.........: _GetMinMaxNumber($sTypeIndx, $n1, $n2, $n3=Default, ... $n10=Default)
    ; Parameters ....: $sTypeIndx Start-Index übergebener Arrays mit Vorzeichen '+' für Rückgabe MaxNumber
    ; Für Rückgabe MinNumber braucht kein Vorzeichen übergeben werden.
    ; Werden keine Arrays verwendet, wird nur '+' für Max oder '' für Min übergeben.
    ; $n1...$n10 Einzelwerte und/oder 1D-Arrays
    ; Return values .: Erfolg kleinster/größter Zahlenwert aus allen Parametern
    ; Fehler Leerstring, @error: 1 ==> Einzelwert $n1 ist nicht numerisch
    ; Author ........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ; Remarks .......: Bei Verwendung von Arrays gilt für alle derselbe Startindex.
    ; Ist $n1 kein Array, muß der Wert zwingend numerisch/Zahlenstring sein. Andere Werte
    ; (auch innerhalb übergebener Arrays) werden ignoriert, wenn sie nicht numerisch/Zahlenstring sind.
    ; Als String übergebene Zahlen (Ganzzahlen, Float) werden beim Vergleich zu Number gewandelt.
    ; ===============================================================================================================================
    Func _GetMinMaxNumber($sTypeIndx, $n1, $n2, $n3=Default, $n4=Default, $n5=Default, $n6=Default, $n7=Default, $n8=Default, $n9=Default, $n10=Default)
    Local $min_max = $n1, $min_max2, $val, $max = 0
    If StringLeft($sTypeIndx, 1) = '+' Then $max = 1
    If $n2 == 'sub' Then
    If UBound($n1) = $sTypeIndx +1 Then Return $n1[UBound($n1) -1]
    $min_max = $n1[$sTypeIndx]
    For $i = $sTypeIndx +1 To UBound($n1) -1
    If StringRegExp($n1[$i], '\A[-+]{0,1}\d+\.{0,1}\d*\z') Then
    $n1[$i] = Number($n1[$i])
    Else
    ContinueLoop
    EndIf
    If $max Then
    If $n1[$i] > $min_max Then $min_max = $n1[$i]
    Else
    If $n1[$i] < $min_max Then $min_max = $n1[$i]
    EndIf
    Next
    Return $min_max
    EndIf
    If IsArray($min_max) Then
    $min_max = _GetMinMaxNumber($sTypeIndx, $min_max, 'sub')
    Else
    If StringRegExp($min_max, '\A[-+]{0,1}\d+\.{0,1}\d*\z') Then
    $min_max = Number($min_max)
    Else
    Return SetError(1,0,'')
    EndIf
    EndIf
    For $i = 2 To 10
    $val = Eval('n' & $i)
    If IsKeyword($val) Then ExitLoop
    If IsArray($val) Then
    $min_max2 = _GetMinMaxNumber($sTypeIndx, $val, 'sub')
    If $max Then
    If $min_max2 > $min_max Then $min_max = $min_max2
    Else
    If $min_max2 < $min_max Then $min_max = $min_max2
    EndIf
    Else
    If StringRegExp($val, '\A[-+]{0,1}\d+\.{0,1}\d*\z') Then
    $val = Number($val)
    If $max Then
    If $val > $min_max Then $min_max = $val
    Else
    If $val < $min_max Then $min_max = $val
    EndIf
    EndIf
    EndIf
    Next
    Return $min_max
    EndFunc ;==>_GetMinMaxNumber

    [/autoit]

    Dateien

    _GetMinMaxNumber.au3 4,06 kB – 462 Downloads
  • Excel Tabelle auslesen und Datumsformat mit übernehmen

    • BugFix
    • 9. November 2010 um 19:08

    Ich hab hier mal noch weitere Varianten erstellt. Die .Copy Variante ist eigentlich am Besten - du sparst dir das Formatieren, da .Copy das Format übernimmt.

    Spoiler anzeigen
    [autoit]

    ; === wenn du einen komplexen Bereich (Range) kopieren willst, geht das auch so (Formatierung wird übernommen):
    $oBook1.Sheets(1).Range('A1:I16').Copy($oBook2.Sheets(1).Range('A1:I16'))

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

    ; === Offset Variante mit Auslesen, Schreiben,Formatieren
    ; === Offset kann entweder auf das Excel-Objekt selbst oder auf Sheet-Objekte angewendet werden
    For $i = 0 To 15 ; 16 Zeilen (1 - 16)
    For $j = 0 To 8 ; 9 Spalten (A-I)
    ; === Datum aus Book1 auslesen und in Book2 eintragen
    $Date = $oBook1.Sheets(1).Range($RangeRead).Offset($i, $j).Formula
    $oBook2.Sheets(1).Range($RangeRead).Offset($i, $j).Value = $Date
    ; === als Datum formatieren
    $oBook2.Sheets(1).Range($RangeRead).Offset($i, $j).NumberFormat = "TT.MM.JJJJ"
    Next
    Next

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

    ; === Offset Variante mit Copy
    For $i = 0 To 15 ; 16 Zeilen (1 - 16)
    For $j = 0 To 8 ; 9 Spalten (A-I)
    $oRangeRead = $oBook1.Sheets(1).Range($RangeRead).Offset($i, $j)
    $oRangeWrite = $oBook2.Sheets(1).Range($RangeRead).Offset($i, $j)
    $oRangeRead.Copy($oRangeWrite)
    Next
    Next

    [/autoit]
  • Variable aus Ini lesen und im Pfad einsetzen

    • BugFix
    • 9. November 2010 um 18:10

    Wozu der Umweg über Run?

    [autoit]

    FileCopy("R:\test.exe", "C:\Dokumente und Einstellungen\" & $gesetzerusername & "\Startmenü\Programme\Autostart", 8)

    [/autoit]
  • TS3 Server online stellen

    • BugFix
    • 9. November 2010 um 18:05

    Probier mal dort:
    http://teamspeak-fans.de/kostenlose-teamspeak-server/

  • Excel Tabelle auslesen und Datumsformat mit übernehmen

    • BugFix
    • 9. November 2010 um 12:37
    Zitat von milchtrinker

    Du liest in deinem Script die Excel Liste auf eine ganz andere Methode aus, als ich das tue.
    In meiner Hilfe stehen aber diese Befehle, die du verwendest gar nicht mit drinnen.
    Oder ich bin derart Blind. Wo kann ich denn sowas auch nachlesen?


    :D Wenn man mit dem Excel- (oder auch Word-) Objekt umgehen kann, ist es einfacher die direkten Befehle zu verwenden. Du siehst diese nur nicht, weil sie innerhalb der UDF-Funktionen ablaufen. (Einfach mal das Excel-Include öffnen und die einzelnen Funktionen anschauen).

    Zu deinem Auslesen eines Bereiches. Ich habe mal ein kleines Muster erstellt und kommentiert. Ich denke, das erklärt es recht gut.

    Spoiler anzeigen
    [autoit]

    $oExcel = ObjCreate('Excel.Application')
    ;~ $oExcel.Visible = 1

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

    $sPath1 = 'C:\Test\test.xls'
    $sPath2 = 'C:\Test\test_1.xls'

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

    $RangeRead = "A1"

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

    $oBook2 = $oExcel.WorkBooks.Add
    $oBook1 = $oExcel.Workbooks.Open($sPath1)

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

    ; === nehmen wir an, es wird von A1 bis I16 gelesen
    ; === dazu bietet sich die Methode "Offset" an, es wird um ein Offset(Versatz) von (Zeilen,Spalten) zur Ausgangsrange gelesen
    ; === D.h., um die Startrange auch zu verwenden, muß mit Offset(0,0) gestartet werden (negatives Offset geht übrigens auch)
    ; === Offset funktioniert aber nicht mit dem Workbookobjekt - hier verwenden wir das Excelobjekt selbst

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

    For $i = 0 To 15 ; 16 Zeilen (1 - 16)
    For $j = 0 To 8 ; 9 Spalten (A-I)
    ; === als Zwischenschritt setze ich den Fokus auf die jeweilige Zelle (um die Zelladresse ermitteln zu können)
    $oExcel.Range($RangeRead).Offset($i, $j).Select
    ; === dann lese ich das Datum aus
    $Date = $oExcel.Selection.Formula
    ; === nun lasse ich mir die ZellAdresse ausgeben um an dieselbe Adresse in der Zieltabelle zu schreiben
    $Cell = StringReplace($oExcel.Selection.Address, '$', '')
    ; === in Zieltabelle schreiben
    $oBook2.Sheets(1).Range($Cell).Value = $Date
    ; === als Datum formatieren
    $oBook2.Sheets(1).Range($Cell).NumberFormat = "TT.MM.JJJJ"
    Next
    Next

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

    $oExcel.DisplayAlerts = False ; <== unterdrückt Speichern - Nachfrage
    $oExcel.ActiveWorkBook.SaveAs($sPath2)
    $oExcel.Application.Quit

    [/autoit]
  • Excel Tabelle auslesen und Datumsformat mit übernehmen

    • BugFix
    • 9. November 2010 um 10:18

    Um ein Excel-Datum auszulesen, darfst du nicht den Wert (.Value) der Zelle auslesen, sondern mußt die Formel (.Formula) auslesen.
    Der Wert gibt dir das Datum als 'JJJJMMTThhmmss' zurück. Wenn du das in eine andere Zelle einträgst, wird es als Zeichenkette und nicht als Datum erkannt.
    Die Formel gibt den intern verwendeten Integerwert für das Datum zurück. Schreibst du diesen in eine andere Zelle und formatierst als Datum, so wird auch das korrekte Datum angezeigt.
    Und verwende bei deinen Variablen besser einen Bezug zum Typ - $o.. für Objekt. Macht es lesbarer.

    Spoiler anzeigen
    [autoit]

    $oExcel = ObjCreate('Excel.Application')

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

    $sPath1 = 'C:\Test\test.xls'
    $sPath2 = 'C:\Test\test_1.xls'

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

    $RangeRead = 'D1'
    $RangeWrite = 'A1'

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

    $oBook1 = $oExcel.Workbooks.Open($sPath1)
    $oBook2 = $oExcel.WorkBooks.Add

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

    $Date = $oBook1.Sheets(1).Range($RangeRead).Formula ; Datum ist kein Wert, sondern eine Formel, Wert bringt: JJJJMMTThhmmss!!

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

    $oBook2.Sheets(1).Range($RangeWrite).Value = $Date
    $oBook2.Sheets(1).Range($RangeWrite).NumberFormat = "TT.MM.JJJJ"

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

    $oExcel.DisplayAlerts = False ; <== unterdrückt Speichern - Nachfrage
    $oExcel.ActiveWorkBook.SaveAs($sPath2)
    $oExcel.Application.Quit

    [/autoit]
  • Snippets/Code-Schnipsel in SciTE

    • BugFix
    • 9. November 2010 um 09:30
    Zitat von Understood

    Und das funktioniert nicht bei mir...


    Du bist sicher mit mir einer Meinung, dass das eine sehr detaillierte und aussagekräftige Fehlerbeschreibung ist... :whistling:

  • Sicherung (*.BAK) von Autoit Scripten

    • BugFix
    • 9. November 2010 um 09:26

    In SciTE - Config kannst du es aktivieren/ deaktivieren. Der Pfad ist meines Wissens immer: ..Skriptfad\Backup\

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.

    Dateien

    No_BAK.jpg 62,09 kB – 0 Downloads
  • Info in einer GUI

    • BugFix
    • 8. November 2010 um 18:29

    Warum so kompliziert? Wie wärs denn mit der so einfachen nativen Funktion: GUICtrlSetTip() ? ;)

  • Helligkeit ändern

    • BugFix
    • 7. November 2010 um 20:54

    Würde dir gern helfen - aber da dies nur ab Vista aufwärts funktioniert, könnte ich die Funktionen nicht testen.

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™