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. Scritch

Beiträge von Scritch

  • Alternative zu _ArrayAdd

    • Scritch
    • 9. Mai 2011 um 08:49

    Generell Probleme habe ich nicht. Das sind jetzt bloß Dinge, die mit Arrays vorher nicht angestellt habe und ich mich daher bischen mit schwer tue. Das Tut kenne ich schon, schaue auch ab und zu mal wieder rein, trotzdem danke für den Hinweis :)

  • Weiteren Wert in Datenfeld von Array hinzufügen

    • Scritch
    • 6. Mai 2011 um 15:42

    Wie ist denn die max. Stringlänge in einem Array?

  • Weiteren Wert in Datenfeld von Array hinzufügen

    • Scritch
    • 6. Mai 2011 um 15:32

    Klasse, war alle bisherige Arbeit fast vergebens :thumbdown:
    Aber danke für die info, überlege mir dann eine andere Lösung.

  • Weiteren Wert in Datenfeld von Array hinzufügen

    • Scritch
    • 6. Mai 2011 um 15:19

    Joa... teilweise klappts bei mir, nur beendet sich das Skript mit folgender Fehlermeldung nach einiger Zeit:
    "error allocating memory"
    Array zu groß? Mit 4GB RAM sollte bei 200 Spalten und teilweise je Spalte ca 60 Zeichen eig. nicht Schluss sein, oder? :pinch:

    Mal eine kurze Erläuterung zum Skript: Habe auf mehreren PCs eine .ini vorliegen, wo die inst. Software gespeichert ist.
    ich möchte eine Auswertung von allen PCs und aller Software machen und dabei auflisten, auf welchem PC welche
    Software installiert ist und wie oft jedes Programm (wegen der Lizenzen) vorhanden ist.

    Dabei ist es halt so dass in der ersten Spalte das Softwareprodukt steht (meinetwegen Firefox). Das ist nun auf jedem Rechner
    installiert. Alle Rechner auf denen das installiert ist, werden nun in die 4 Spalte geschrieben, in ein "Kästchen" damit das später
    in einer .csv-Datei alles schön sortiert dargestellt werden kann. Und da kommt dann halt die besagte Fehlermeldung, wenn
    schon bischen was im Array steht...

  • Weiteren Wert in Datenfeld von Array hinzufügen

    • Scritch
    • 6. Mai 2011 um 12:21

    Okay, dann mal bischen genauer :)

    Also, das Array wird in einer Schleife "gefüllt". Nach dem ersten Durchgang würds ungefähr so aussehen:

    spalte1 spalte2

    (auto12)(auto34)
    (auto56)(auto78)

    Im nächsten Durchlauf der Schleife wird aber in Spalte2 wo auto34 drinnen steht, ein neuer Eintrag rein-
    geschrieben. Dieser neue Eintrag soll aber den alten nicht ersetzten, sondern zusätzlich in dem gleichen
    Feld stehen. Quasi so:

    spalte1 spalte2

    (auto12)(auto34, auto9)
    (auto56)(auto78)

    In den Datenfeldern können nachher auch bis zu 130 Einträge stehen

    * Einträge in Klammern sind ein Datenfeld

  • Weiteren Wert in Datenfeld von Array hinzufügen

    • Scritch
    • 6. Mai 2011 um 11:51

    Hallöchen.
    Nun habe ich ja schon gelernt, wie man ein Array dynamisch verändert und promt stehe ich vorm nächsten Problem:
    Ich habe ein 2D Array. Habe nun in einem Feld schon einen Wert stehen, wo später aber noch einer hinzukommen soll.
    Wie stelle ich das an? :)

  • Array: If-Abfrage einer Zeile

    • Scritch
    • 5. Mai 2011 um 17:33

    Ok, also so?!:

    [autoit]

    Dim $csv[2][4]
    for $c = 0 to UBound($csv) - 1
    for $d = 0 to ubound($csv) - 1
    If $csv[$c][$d] = '' Then
    for $b = 0 to ubound($asoftware) - 1
    $csv[$b][0] = $asoftware[$b]
    ReDim $csv[ubound($asoftware) + 1][4]
    _ArrayDisplay($csv)
    Next
    EndIf
    Next
    Next

    [/autoit]

    Edit: Funktioniert nicht :( Narf...

  • Array: If-Abfrage einer Zeile

    • Scritch
    • 5. Mai 2011 um 17:15

    Ich möchte ein Array kontrollieren, ob in diesem schon was drinnen steht, bzw. eine einzelne Spalte (Das Array ist 2D)
    Wie stelle ich das am besten an? Mit dem Bsp. aus BugFix's Tut kann ich leider nicht viel mit anfangen:

    [autoit]

    Local $array[1] ; Array hat zum Programmstart 1 Element

    $newData = GUICtrlRead($Input)
    If $newData <> '' Then ; prüfen ob nicht leer
    ; der erste Eintrag soll in das bestehende 1. Array-Element eingetragen werden, z.Zt. das letzte
    ; für weiter Einträge muß das Array vorher um ein Element vergrößert werden
    If $array[Ubound($array)-1] <> '' Then ; ist das letzte Element NICHT leer (dann ist es NICHT das erste)
    ReDim $array[Ubound($array)+1] ; Arraygröße neu: 1 größer als aktuelle Größe Ubound($array)
    EndIf
    $array[Ubound($array)-1] = $newData ; Daten in das letzte Element schreiben, im ersten Durchlauf ist dies das erste.
    EndIf

    [/autoit]
  • Variable aus batch an autoit weitergeben

    • Scritch
    • 5. Mai 2011 um 16:54

    Eine Idee schon, auch wenns nicht die schönste ist: Schreibe deine Variable in eine Datei aus der Batchdatei und lese die Datei in Autoit wieder ein.

  • Alternative zu _ArrayAdd

    • Scritch
    • 5. Mai 2011 um 16:27
    Zitat von AspirinJunkie

    Bei allen For-Schleifen die ich bei dir gesehen habe ignorierst du immer das 1. Element.

    Hat den Grund, weil in der ersten Zeile die Größe des Arrays stand. Und das ist ein Eintrag, den ich nicht brauche.

  • Alternative zu _ArrayAdd

    • Scritch
    • 5. Mai 2011 um 15:14
    Zitat von AspirinJunkie

    Hab dein Skript mal auf einen wesentlichen Aspekt hin verkürzt - was fällt dir dabei auf?:

    Ausser dass mein Array nur einen Eintrag hat und dass das in einer Schleife abzuarbeiten ziemlich blödsinnig ist, nichts... (Zur Verteidigung: Das Array ist normal größer)

    Zitat von AspirinJunkie

    Ich verstehe es so das du ein 2D-Array erstellen willst und gleich direkt eine Spalte mit dem Inhalt eines 1D-Arrays befüllen willst.

    Genau das möchte ich!

    Zitat von AspirinJunkie

    Warum du in der Schleife immer ein neues Array erstellst (dim) ist mir zwar nicht klar

    Jetzt wo dus sagst: Bischen schwachsinnig, ja :pinch:

    Zitat von AspirinJunkie

    in der 2. Dimension sollte schon eine Zahl größer 0 stehen

    Hatte irgendwie im Kopf, dass da die Zählweise von links auch bei 0 anfängt, wie bei den Spalten.

    Zitat von AspirinJunkie

    Vielleicht zur Verständnis nochmal der angesprochene 2-Zeiler

    Ok, danke dafür. Habs jetzt glaube ich... wenigstens zum Teil...

    [autoit]

    Dim $csv[30][4]
    for $b = 1 to ubound($asoftware) - 1
    $csv[$b][1] = $asoftware[$b]
    _ArrayDisplay($csv)
    Next

    [/autoit]

    Edit: Ich möchte es jetzt nur noch so haben, dass ich die Arraygröße vorher nicht bestimmen brauche... Ich bastel mal weiter.

    Edit2: Habs jetzt so wie ich es haben wollte, danke für die Hilfe:

    [autoit]

    Dim $csv[2][4];Größe des Arrays (Sollte dynamisch angepasst werden)
    for $b = 1 to ubound($asoftware) - 1
    $csv[$b][1] = $asoftware[$b]
    ReDim $csv[ubound($asoftware) + 1][4]
    _ArrayDisplay($csv)
    Next

    [/autoit]
  • Alternative zu _ArrayAdd

    • Scritch
    • 5. Mai 2011 um 13:52

    Soo:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <file.au3>

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

    dim $pcname[1] = ["pcname"]
    Local $csvpfad = @ScriptDir & "\test.csv"
    Local $open = FileOpen($csvpfad, 0)
    ;~ global $csv2array = _CSV2Array($open, Default, True, 1)
    FileClose($csvpfad)
    ;_ArrayDisplay($csv2array)

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

    For $a = 1 To UBound($pcname) - 1
    $onlinestatus = Ping($pcname[$a],500) ; onlinestatus abfragen für schnellere verarbeitung
    If $onlinestatus Then

    Local $software = "\\" &$pcname[$a] & "\d$\HaSo\software.ini"
    Global $asoftware
    _FileReadtoarray($software, $asoftware) ;Erste Softwareliste wird eingelesen und gleich in die .csv geschrieben

    for $b = 1 to ubound($asoftware) - 1
    dim $csv[$b - 1][0] = $asoftware[$b]
    _ArrayDisplay($csv)
    Next
    EndIf
    Next

    [/autoit]

    Ich lese hier eine Liste mit installierter Software von einem anderen Computer in ein array ein. Dann möchte ich diese Liste an
    Software gerne in ein anderes Array, in die erste Spalte haben. Das habe ich mit

    [autoit]

    for $b = 1 to ubound($asoftware) - 1
    dim $csv[$b - 1][0] = $asoftware[$b]
    _ArrayDisplay($csv)
    Next

    [/autoit]


    versucht. Das sagt mir Autoit aber immer "badly formated". Ich komme einfach nicht drauf, was ich verkehrt mache :(

  • Alternative zu _ArrayAdd

    • Scritch
    • 5. Mai 2011 um 11:47

    Ja, einfach selbst schreiben, ganz einfach :P
    Ich habe hier eine Teillösung gefunden, ist aber kein 2 Zeiler
    und ich weiß auch noch nicht, wie ich in die 2 Spalte Werte reinbekomme.

    Spoiler anzeigen
    [autoit]

    $sMsg = "Add a single element to a 2D array:" & @CRLF
    Global $avTesting[3][2] = [[1, 2],[3, 4],[5, 6]]
    $RET = __ArrayAdd($avTesting, "Test")
    $iErrSav = @error
    $iExtSav = @extended
    _ArrayDisplay($avTesting, "$avTesting")

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

    Func __ArrayAdd(ByRef $avArray, $vValue, $NestArray = True)
    Local $iBoundArray0, $iBoundArray1, $iBoundArray2, $iBoundValue1

    If IsArray($avArray) = 0 Then Return SetError(1, 0, -1); $avArray is not an array

    $iBoundArray0 = UBound($avArray, 0); No. of dimesions in array
    If $iBoundArray0 > 2 Then Return SetError(1, 1, -1); $avArray is more than 2D

    $iBoundArray1 = UBound($avArray, 1); Size of array in first dimension
    If $iBoundArray0 = 2 Then $iBoundArray2 = UBound($avArray, 2); Size of array in second dimension

    If ($iBoundArray0 = 1) Or (IsArray($vValue) = 0) Or $NestArray Then
    ; If input array is 1D, or $vValue is not an array, or $NestArray = True (default) then save $vValue literally
    If $iBoundArray0 = 1 Then
    ; Add to 1D array
    ReDim $avArray[$iBoundArray1 + 1]
    $avArray[$iBoundArray1] = $vValue
    Else
    ; Add to 2D array at [n][0]
    ReDim $avArray[$iBoundArray1 + 1][$iBoundArray2]
    $avArray[$iBoundArray1][0] = $vValue
    EndIf
    Else
    ; If input array is 2D, and $vValue is an array, and $NestArray = False,
    ; then $vValue is a 1D array of values to add as a new row.
    If UBound($vValue, 0) <> 1 Then Return SetError(1, 2, -1); $vValue array is not 1D
    $iBoundValue1 = UBound($vValue, 1)
    If $iBoundArray2 < $iBoundValue1 Then Return SetError(1, 3, -1); $vValue array has too many elements
    ReDim $avArray[$iBoundArray1 + 1][$iBoundArray2]
    For $n = 0 To $iBoundValue1 - 1
    $avArray[$iBoundArray1][$n] = $vValue[$n]
    Next
    EndIf

    ; Return index of new last row in $avArray
    Return $iBoundArray1
    EndFunc ;==>__ArrayAdd

    [/autoit]


    Ich probiers mal mit dem alleine schreiben ^^

  • CSV-Datei in ein Array einlesen

    • Scritch
    • 5. Mai 2011 um 11:20

    Hallo,
    dazu gibs schon ein Lösung: https://autoit.de/index.php?page…&amp;highlight=

  • Alternative zu _ArrayAdd

    • Scritch
    • 5. Mai 2011 um 09:48

    Hallo,
    ich möchte einen Eintrag zu einem 2D-Array hinzugügen. Die Hilfe sagt ja, dass bei _ArrayAdd nur mit 1D-Arrays gearbeitet werden kann. Welche 2D-Alternative gibt es hierzu?

  • Drucker über Konsole installieren

    • Scritch
    • 4. Mai 2011 um 08:54

    Entschuldige die blöde Frage, aber wie verwende ich dein Script? 8| Neues Script und ausführen bringt irgendwie nichts :P
    Ich habe verschieden rundll32-Befehle direkt auf Kommandozeile ausprobiert.
    Heute bekomme ich eine andere Fehlermeldung, beim Öffnen der Druckereigenschaften.
    "die druckereigenschaften können nicht angezeigt werden. entwerder der eingegeben druckername ist ungültig, oder der angegeben drucker ist nicht mehr mit dem server verbunden."
    Weiß nicht was ich damit anfangen soll. Druckernamen habe ich copy paste eingefügt und der Drucker ist immernoch da!

    Edit: "Der Druckerwarteschlangedienst wird nicht ausgeführt" ... Was hat das nun wieder zu bedeuten?!
    Edit2: Warteschlangendienst ist "gestartet"...

  • Drucker über Konsole installieren

    • Scritch
    • 4. Mai 2011 um 08:04

    Ich möchte bloß einen Drucker löschen, kan allerdings lokal wie auch netzwerk sein. Habe beides im Einsatz.

  • Drucker über Konsole installieren

    • Scritch
    • 3. Mai 2011 um 16:35

    Schön und gut, bringt mich bei meinem Problem aber nicht weiter.
    Ist das gleiche wenn ich "rundll32 printui.dll PrintUIEntry /?" auf der
    Kommandozeile eingebe... Nur noch mit einer Einleitung...

  • Drucker über Konsole installieren

    • Scritch
    • 3. Mai 2011 um 15:33

    Hallöchen,
    habe ein kleines Problemchen mit meiner Druckerverwaltung. Ich wollte Drucker gerne per Script bzw. über die Kommandozeile löschen. Das bringt Windows ja von Haus aus schon mit.

    rundll32 printui.dll,PrintUIEntry /gd /c\\Computer /n\\Computer\Drucker

    Wenn ich es jetzt meinen Bedürfnissen anpasse, bekomme ich nur eine Fehlermeldung. Sonst passiert nichts.

    Also:

    rundll32 printui.dll,PrintUIEntry /gd /c\\meinPC /n\\meinPC\Lexmark T430 PS

    Fehlermeldung:
    "Pro Maschine Druckerverbindungen können nicht gelöscht werden. Der Vorgang konnte nicht abgeschlossen werden."

    Das geschieht bei lokalen und bei Netzwerkdruckern. Wie kann das sein?

  • Array eingelesen - wo ist es?

    • Scritch
    • 19. April 2011 um 15:54

    Hallo,
    vll. eine etwas komische Frage, aber ich frage sie dennoch: Wenn ich ein Array in Autoit erstelle, dann muss es sich ja auch irgendwo im Speicher befinden, richtig?
    Ist es möglich dieses Array mit anderen Programmen, oder mit einem anderen Autoit-Script auslesen? Man müsste ja eig. nur die Speicheradresse wissen,
    oder ist das so einfach nicht?

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™