CSV inhalt suchen und ersetzen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

CSV inhalt suchen und ersetzen

24 Jun 2018, 11:02

Hallo
würde gerne bei einer CSV Datei den Inhalt der 1. Spalte suchen und bei treffer durch den Wert den 2. Spalte ersetzen.

Beispiel CSV-Datei

Code: Select all

32049,Herford

32105,Bad Salzuflen

32120,Hiddenhausen

32130,Enger
Wenn Zwischenablage "32049" enthält, soll das durch "Herford" ersetzt werden.

Meine Kenntnisse reichen soweit, dass ich mir sowas zusammen gestellt habe:

Code: Select all

F11::
clipboard = ""
send ^c
Clipwait, 2

zwischenablage := clipboard
suchen := "32049"
ersetzen := "Herford"
ergebnis :=  StrReplace(zwischenablage, suchen, ersetzen)

clipboard = ""
clipboard = %ergebnis%
clipwait, 2
send, %clipboard%
return
Doch wenn ich so vorgehe, wird das Script zu lang und sehr aufwendig.
Daher würde ich gerne wissen, wie ich die Begriffe auf einer CSV datei verlagern kann?


vielen dank und Gruß
just me
Posts: 9442
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: CSV inhalt suchen und ersetzen

25 Jun 2018, 05:03

Moin,

den Inhalt Deiner 'CSV'-Datei hast Du ja schon angedeutet. Sie sollte allerdings keine Leerzeilen enthalten.

Ich schlage vor, die Datei am Anfang Deines Skripts komplett einzulesen (z.B. mit FileRead). Das spart später Plattenzugriffe.

Danach gibt es mehrere Alternativen. Die einfachste dürfte sein, nach Übernahme der Daten aus dem Clipboard die Variable mit dem Dateiinhalt zeilenweise zu parsen, die einzelnen Zeilen am Komma zu splitten und die Einzelteile an das vorhandene StrReplace zu übergeben. Wenn weder die Datei noch der Inhalt des Clipboards besonders groß sind, sollte das ausreichend schnell funktionieren.

Abhängig davon, was die Zwischenablage tatsächlich enthält und ob z.B. nur ein Treffer möglich ist, lässt sich das noch verbessern..
User avatar
divanebaba
Posts: 805
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: CSV inhalt suchen und ersetzen

25 Jun 2018, 06:13

Hi.
Als Nichtprogrammierer glaube ich einen kleinen Fehler zu sehen.
Statt clipboard = "" sollte dort clipboard := "" oder clipboard = stehen.
Meint ihr nicht auch?
Um keinen Ärger mit ClipWait zu bekommen, setze ich immer ein sleep 50 nach dem Kopiervorgang ein. Anders ausgedrückt: Zwischen Clipwait und der Zuweisung eine kleine Pause einsetzen.
Geschmackssache.
Einfach nur ein toller Typ. :mrgreen:
songoku
Posts: 73
Joined: 12 Apr 2018, 13:22

Re: CSV inhalt suchen und ersetzen

25 Jun 2018, 13:50

@just me Danke für die Idee.

Code: Select all

FileRead, myCSV, plz.csv
= damit lese ich meine CSV-Datei, mit msgbox probiert es klappt. Aber dann hört es auf, anschließend soll ich die CSV-Datei Splittern, einmal nach , und einmal nach Zeilenumbruch.

Code: Select all

PLZ := StrSplit(%myCSV%, ",", "`n", "`r")
Da komme ich nicht mehr weiter.


@divanebaba Danke für dein Tipp
garry
Posts: 3758
Joined: 22 Dec 2013, 12:50

Re: CSV inhalt suchen und ersetzen

25 Jun 2018, 14:09

ein Beispiel

Code: Select all

#warn
setworkingdir,%a_scriptdir%

e4x:=""
e:=""
f1=%a_scriptdir%\new_txt.txt
ifexist,%f1%
  filedelete,%f1%

;fileread,e4x,mycsv_file.csv

;- Beispiel :
e4x=
(Ltrim join`r`n
32049,Herford
32105,Bad Salzuflen
32120,Hiddenhausen
32130,Enger
)
Loop, Parse,e4x, `n,`r
{
 x=%a_loopfield%
  if x=
    continue
 stringsplit,C,x,`,
 e .= c2 . "`r`n"
}
Fileappend,%e%,%f1%
run,%f1%
exitapp

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 18 guests