Teil eines Arrays wie in Excel bearbeiten

  • Nach langer Zeit ohne Probleme 8) denke ich mal wieder über eine Optimierung nach:

    Ich lese eine große csv-Datei in ein Array ein und möchte im Programm eine Spalte davon anzeigen und bearbeiten - so als ob ich diesen Teil des Arrays alleine in Excel vor mir hätte. Bisher habe ich die Input-Datei mit Excel geöffnet, Spalte gesucht und geändert, Datei gespeichert und die ganze Datei neu im Programm eingelesen.

    In der ersten Spalte stehen die Feldbezeichnungen, daher müsste ich Spalte 1 und Spalte xx anzeigen können, die Werte in Spalte xx ändern und das Ganze wieder speichern.

    Gibt es dafür schon eine fertige Lösung?

    Danke für Eure Hilfe!

    :)

  • Ich hatte mal angefangen, etwas in der Art zu schreiben. Ziel war dabei eine komplexe bedingte Formatierung zu ermöglichen. Excel ist da ja doch recht limitiert, bzw. verfällt in den Schleichgang, wenn man mehr als 3..4 Bedingungen pro Zelle definiert.

    Das Basisgerüst steht, habe das Projekt dann aber aus Zeitgründen erst mal auf Eis gelegt. Ich suche das mal raus und werde es posten. Vielleicht hilft es dir weiter.

  • Hilft dir das?

    Die Spalten sind entweder über die einsbasierte Spaltennummer oder den Spaltenbezeichner wie bspw in Excel, also A,B, XX usw. ansprechbar

    daher müsste ich Spalte 1 und Spalte xx anzeigen können, die Werte in Spalte xx ändern

    Wieso "anzeigen"? Was soll denn gemacht werden? Ändern kann man direkt in einer CSV auch ohne "anzeigen"?!

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (13. April 2023 um 19:07)

  • Es ist eine große csv-Datei, die ich im Programm in ein Array einlese. Gelegentlich muss ich in einer Spalte testweise einige Werte ändern. Bisher verlasse ich das Programm, starte Excel, suche die Spalte, ändere und lese wieder ein und teste. Wenn die Tests erfolgreich waren, dann sollen die Werte in der ursprünglichen csv-Datei bleiben, sonst wieder zurück zum alten Stand.

    Daher ist meine Idee, in einer Spalte im eingelesenen Array einige Werte zu ändern wie mit Excel, also vom AutoIt-Programm aus.

    :)

  • Habe meine "Cells.au3" noch mal angeschaut. Grundsätzlich wäre es damit machbar, müsste aber auf jeden Fall stark verändert werden, da in jetziger Form nur das Anzeigen (und bedingte Formatieren) von Werten vorgesehen ist. Aber das auszuschlacken und umzubauen ist sicher komplizierter, als es selbst zu Erstellen.

    Würde es bei Dir unter Meine UDF erwarten, bin aber entweder blind oder Cells.au3 ist nicht da? Nur zum Anschauen.

    Andere Idee: ich habe gerade eine UDF gefunden, mit der man CSV-Dateien bearbeiten kann. Ist nur ziemlich langsam bei großen Dateien. Wenn ich da eine Einschränkung auf die Anzeige von 2 Spalten hinbekäme, würde ich nicht das Array sondern die csv bearbeiten und dann das Array neu laden. https://ttps//www.autoitscr…sv-file-editor/ Leider geht das Script weit über meine Verständnisgrenzen :S

    :)

    2 Mal editiert, zuletzt von HansJ54 (13. April 2023 um 21:07)

  • Würde es bei Dir unter Meine UDF erwarten, bin aber entweder blind oder Cells.au3 ist nicht da?

    Das ist ein noch unvollendetes Projekt, daher noch nicht gepostet.

    Langsam werden Editierprogramme indem Moment, wenn man versucht den gesamten Inhalt auf einmal bearbeitbar darzustellen. Editoren arbeiten mit einem "View" - einem Dateausschnitt, der zum Bearbeiten angezeigt wird. Daten davor und danach werden zwar vorgehalten, aber nur bei Bedarf (Scrollen) angezeigt.

    Nach diesem Prinzip würde ich bei deiner Problematik auch vorgehen.

  • HansJ54 , du hast immer noch nicht erklärt bzw beschrieben, was überhaupt gemacht werden soll.

    Ich gehe von einem XY-Problem aus...du beschreibst mit

    Gelegentlich muss ich in einer Spalte testweise einige Werte ändern. Bisher verlasse ich das Programm, starte Excel, suche die Spalte, ändere und lese wieder ein und teste.

    das was du jetzt aktuell MACHST!

    Was allerdings vollkommen uninteressant ist und auch nicht zum Ziel führt, ansonsten gäbe es diesen Thread nicht!

    Beschreibe besser, was DEIN ZIEL sein soll, am Besten mit Beispieldaten. Vorher -> Nachher.

    Anhand welcher Kriterien sollen "einige" Werte in der Tabelle geändert werden?

    Beschreibe dein Problem, und nicht den von dir bisher umgesetzten problematischen Weg.

  • Hallo Andy,

    ich dachte, ich hätte mein Problem verständlich genug beschrieben - ich versuche es noch einmal:

    Ziel: aus einem 2D-Array die Spalte 1 (Namen) und wahlweise irgendeine weitere Spalte x anzeigen und einzelne per Maus angeklickte Werte in der Spalte x ändern/eintragen/überschreiben können.

    Interessant übrigens: ich habe gestern von ChatGPT ein Skript bekommen, das zwar nur teilweise funktionierte (war nur ein Viewer und ich konnte die Einträge in der 2. Spalte nicht ändern). Aber zumindest konnte ich sehen, dass die Lösung wohl irgendwie über ListView möglich ist und habe dadurch zumindest einen besseren Suchbegriff und Ansatz.

    Beispiel unten: wenn ich jetzt noch einzelne Werte aus Spalte "Local" anklicken und ändern könnte, wäre ich am Ziel. Vielleicht liegt es $LVN_ENDLABELEDIT - wurde benutzt aber ist unbekannt und ich konnte auch nichts dazu finden. In der Diskussion mit ChatGPT kam dann raus, ich sollte dafür den Wert -177 einsetzen - warum auch immer.

    :)

  • Hallo Andy,

    ich dachte, ich hätte mein Problem verständlich genug beschrieben

    Du bist leider noch immer auf dem Holzweg. Du schilderst nur WIE du vorgehst. Wichtiger ist aber das, WAS du vorhast. Und zwar beschrieben OHNE jeden Programmieransatz. Dass du mit einem Array startest ist für die Betrachtung des WAS erstmal nicht relevant.

    Schreibe mal in der Form:

    - Datei Typ csv

    - in Spalte XY sind relevante Werte

    - wenn Bedingung - dann ändern des Wertes mit...

    - Wertänderung soll in der Datei direkt gespeichert werden

  • Ich versuche es noch einmal:

    Gegeben ein Array in AutoIt mit 2 Spalten. Das möchte ich anzeigen und durch Anklicken einer Zelle in der 2. Spalte den Wert in dieser Zelle per Tastatur ändern (reiner Text, keine Formeln). So eine Art Array-Editor oder Mini-Excel.

    Das Skript oben produziert die Anzeige, aber ich konnte nicht herausfinden, was umzustellen ist um eine Eingabe zu ermöglichen. Für zukünftige Zwecke könnten es auch mal 3 oder 4 Spalten sein, aber vorerst nicht wichtig.

    Vielleicht hilft das Bild?

    :)

  • ich habe meinen unqualifizierten Kommentar gelöscht ^^

    ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Einmal editiert, zuletzt von Schnuffel (15. April 2023 um 12:14)

  • Um eine ListView editierbar zu machen habe ich mal eine UDF geschrieben. Du musst sie quasi nur mit dem Array befüllen und beim "speichern" (deselektieren/enter/...) den Array-Eintrag an dem Index+SubIndex verändern.

    Sollte das sein, was du willst: Listview edit subitems UDF

    Sieht gut aus und ist es vermutlich auch, aber bekomme bei der ListViewEditInput.au3 Fehlermeldung wegen fehlender Functions MapExists() , MapRemove(), MapKeys(). Habe ich vergessen etwas runterzuladen?

    :)

  • Du verwendest eine ältere Version von AutoIt ohne Maps.

    installiere dir die aktuelle Version von AutoIt.

    Vielen Dank, funktioniert jetzt. :)

    Gibt es eigentlich eine Möglichkeit zu sehen, dass es eine neue Version von AutoIt gibt ohne auf der Webseite nachzuschauen? Manche Programme zeigen das per Popup, bei anderen geht es mit Hilfe und "Über". Da ich bei AutoIt nur in SciTE arbeite, habe ich nicht gemerkt, dass es eine neue Version gab.

    :)