CSV letzte Reihe löschen / Gegenteil FileAppend bzw. rückgängig Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Heloo1982
Posts: 30
Joined: 12 Jan 2017, 07:39

CSV letzte Reihe löschen / Gegenteil FileAppend bzw. rückgängig

03 Dec 2018, 05:41

Hallo zusammen,

ich erstelle mit einem Script und einer GUI eine CSV Datei, wo immer neue Zeilen/Reihen erweitert werden. Dafür nutze ich FileAppend:

Code: Select all

FileAppend,
(%Var1%;%Var2%;%Var3%;%Var4%) , mycsv.csv
Return
Nun möchte ich in der GUI einen Button hinzufügen, wo je Klick die letzte Eingabe aus der CSV wieder entfernt wird (Quasi die Eingabe rückgängig gemacht werden kann).

Das hier habe ich bei Google gefunden, allerdings wird die CSV nicht verändert, sondern eine neue CSV mit dem Zusatz "Copy" erstellt, wo die zu entfernenden Zeilen einfach nicht mitkopiert werden. Ist irgendwie nicht das, was ich benötige. Nach dem Include der Library ist es dieser Befehl:

Code: Select all

TF_RemoveLines("mycsv.csv", 1, 2)
(Wobei hier die letzte Zeile wahrscheinlich mit einem Loop und A_LoopReadline noch ermittelt werden müsste.)

Kennt hier jemand eine einfache Lösung?

Gruß Heloo
just me
Posts: 9453
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: CSV letzte Reihe löschen / Gegenteil FileAppend bzw. rückgängig  Topic is solved

03 Dec 2018, 10:57

Moin,

solange Deine Dateien nicht riesig werden:

Code: Select all

#NoEnv
SetWorkingDir, %A_ScriptDir%
Datei := "MyCSV.csv"
; --------------------------------------------------------------------------------------------------------------------------------
; >>>>> nur zum Testen
FileDelete, %Datei%
Loop, 3 {
   I := A_Index
   FileAppend, Zeile %A_Index%`r`n, %Datei%
}
I++
FileAppend, Zeile %I%, %Datei%
; <<<<< nur zum Testen
; --------------------------------------------------------------------------------------------------------------------------------

MsgBox, 0, Vorher, % FileOpen(Datei, "R").Read() . "<"

; >>>>> letzte Zeile löschen (auch eine leere letzte Zeile)
If (File := FileOpen(Datei, "rw")) {
   If (Pos := InStr(File.Read(), "`r`n", 0, 0)) {
      File.Pos := Pos - 1
      File.Length := File.Pos
   }
   File.Close()
}
; <<<<< letzte Zeile löschen (auch eine leere letzte Zeile)

MsgBox, 0, Nachher, % FileOpen(Datei, "R").Read() . "<"

ExitApp
User avatar
Heloo1982
Posts: 30
Joined: 12 Jan 2017, 07:39

Re: CSV letzte Reihe löschen / Gegenteil FileAppend bzw. rückgängig

03 Dec 2018, 11:38

Moin just me,
hat funktioniert, musste mein Skript bzgl FileAppend ein wenig anpassen, aber es funktioniert jetzt mit einem kleinen Schönheitsfehler.
Das hatte ich bei der Frage vergessen mitzugeben.

Ursprünglich:
Datenzeile --> Absatz

Code: Select all

FileAppend,
(%Var1%;%Var2%;%Var3%;%Var4%`n) , mycsv.csv
Return
Jetzt:
Absatz --> Datenzeile

Code: Select all

FileAppend,
(`n%Var1%;%Var2%;%Var3%;%Var4%) , mycsv.csv
Return
Sonst hat es mir die CSV zerschossen und ich musste 2 Zeilen löschen (da eine Leerzeile) um an den ersten Datensatz zu kommen und danach hat er mir den neuen Datensatz in die gleiche Zeile geschrieben. Jetzt funkt es, nur wenn ich eine neue CSV erzeuge dann bleibt Zeile 1 eben leer, damit kann ich aber leben.

Vielen Dank für deine Hilfe!

LG

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 13 guests