Hallo liebe TC-Gemeinde,
ich möchte mehrere im TC markierte CSV-Dateien mit gnuplot öffnen.
Gnuplot kann aber nur eine Konfigurationsdatei per Kommandozeile übergeben werden. Diese muss also die markierten Dateinamen enthalten.
Leider in einem speziellen Format:
Beispiel (zu generierende config.plt):
reset
set title "MPT-Data"
set xlabel "Time [ms]"
set ylabel "Pressure [mbar]"
set grid
set mouse
set autoscale
set style data lines
set datafile separator ";"
set datafile missing "0"
set datafile commentschar "#"
set terminal windows size 1600,800
set terminal windows linewidth 2
set terminal windows background rgb "white"
plot "d:/mpt-data/test11.csv" using 1:2 title "Test11", \
"d:/mpt-data/test12.csv" using 1:2 title "Test12"
So würde es funktionieren ( "/" statt "\", fixer Header vor Dateiliste)
Programmaufruf: gnuplot config.plt
Hat jemand eine Idee, wie man das hinbekommt?
Viele Grüße
Frank
markierte Dateien mit gnuplot anzeigen
Moderators: Hacker, Stefan2, white
Bist du sicher, dass hier Slashes in den Pfadangaben zwingend sind? Wenn das nicht notwendig ist, wäre das sogar mit Batch möglich. Aufgrund der Ersetzung und der Eigenart des plot-Befehls hab ich das mit AutoIt gebastelt:
Speichern als gnuplot.au3, ggf. kompilieren (man kann es auch direkt ausführen lassen). Wichtig: das Skript erwartet als ersten Parameter eine Datei, in der die zu plottenden Dateien aufgelistet sind. Dies kann man im TC mittels %L erreichen. Beispiel für einen Button:
Zum Ausführen dann Dateien markieren und den Button drücken.
Hinweise:
Code: Select all
; markierte Dateien mit gnuplot anzeigen
; http://ghisler.ch/board/viewtopic.php?t=40997
#include <File.au3>
#include <Array.au3>
;------------------------------------------------------------------------------
global const $PLOTFILE = @TempDir & "\config.plt"
global const $GNUPLOT = "C:\Pfad\zur\gnuplot.exe"
;------------------------------------------------------------------------------
global $FileList, $FileListArray, $i, $header, $header_array, $hFile
if NOT $CmdLine[0] > 0 then Exit
$FileList = $CmdLine[1]
;--- Fester Header
$header ='reset\nset title "MPT-Data"\nset xlabel "Time [ms]"\nset ylabel "Pressure [mbar]"\nset grid\n'
$header &='set mouse\nset autoscale\nset style data lines\nset datafile separator ";"\nset datafile missing "0"\n'
$header &='set datafile commentschar "#"\nset terminal windows size 1600,800\nset terminal windows linewidth 2\n'
$header &='set terminal windows background rgb "white"'
$header_array = StringSplit($header, "\n", 1)
if NOT IsArray($header_array) then MsgBox(0, "", "Oops, hier ging was schief")
if _FileReadToArray($FileList, $FileListArray) then
;--- Festen Header in die Plotdatei schreiben
_FileWriteFromArray($PLOTFILE, $header_array, 1)
;--- Alle Dateien in die Plotdatei schreiben
$hFile = FileOpen($PLOTFILE, 1)
FileWrite($hFile, _PlotFileListToString($FileListArray))
FileClose($hFile)
;RunWait($GNUPLOT & " " & $PLOTFILE)
;FileDelete($PLOTFILE)
EndIf
;------------------------------------------------------------------------------
Func _PlotFileListToString($ar)
local $i, $s
for $i=1 to UBound($ar)-1
if $i=1 then $s &= "plot "
$s &= '"' & StringReplace($ar[$i], "\", "/") & '" using 1:2 title '
$s &= '"' & _ExtractFileName($ar[$i]) & '"'
if ($i == UBound($ar)-1) then
$s &= @LF
Else
$s &= ", "
EndIf
Next
; MsgBox(0, "", $s)
Return $s
EndFunc
Func _ExtractFileName(const $file)
local $pos = StringInStr($file, "\", 0, -1)
if ($pos == 0) then $pos = StringInStr($file, ":", 0, -1)
Return StringMid($file, $pos+1, StringLen($file))
EndFunc
Code: Select all
TOTALCMD#BAR#DATA
e:\gnuplot.au3
%L
c:\Programme\AutoIt3.122\Icons\filetype1.ico
gnuplot
c:\
-1
Hinweise:
- das Gnuplot wird nicht gestartet, es wird nur die Plotdatei im %TEMP% erzeugt. Schau's dir erstmal an, vor allem die Plotdatei. Wenn alles passt, kann man das Starten von Gnuplot und das Löschen der Plotdatei freischalten.
- es findet hier so gut wie keine Fehlerprüfung statt, es kann daher gut sein, dass entsprechende Fehlermeldungen ausgegeben werden
Last edited by Dalai on 2014-08-23, 20:24 UTC, edited 1 time in total.
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Dalai du bist bein HELD!
Unglaublich, in der kurzen Zeit schon eine Antwort - und was für eine.
Es funktioniert schon fast perfekt.
Anscheinend wird die erste markierte Datei nicht in die config.plt eingetragen. Leider reichen meine Kenntnisse nicht aus, das zu lösen.
Vielen, vielen Dank schon mal.
Kannst du mir das mit dem Starten und Löschen auch noch erklären?
Viele Grüße
Frank
Unglaublich, in der kurzen Zeit schon eine Antwort - und was für eine.
Es funktioniert schon fast perfekt.
Anscheinend wird die erste markierte Datei nicht in die config.plt eingetragen. Leider reichen meine Kenntnisse nicht aus, das zu lösen.
Vielen, vielen Dank schon mal.
Kannst du mir das mit dem Starten und Löschen auch noch erklären?
Viele Grüße
Frank
Ja, das kommt davon, wenn man mehrfach editiert und sich nicht entscheiden kann oder von anderen Funktionen irritiert wird
. Tausche in der Funktion _PlotFileListToString() die $i=2 durch $i=1 aus (beide Vorkommen!). Ich hab's mal oben gleich korrigiert.
MfG Dalai

In der Zeile 34 nach dem FileClose sind zwei Zeilen auskommentiert. Zum Aktivieren muss lediglich das Semikolon entfernt werden. Vorher muss natürlich der Pfad zu Gnuplot oben im Skript vermerkt werden (wenn die gnuplot.exe im %PATH% liegt, reicht die Angabe "gnuplot.exe" aus).ltec wrote:Kannst du mir das mit dem Starten und Löschen auch noch erklären?
MfG Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64
Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror