markierte Dateien mit gnuplot anzeigen

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
ltec
Junior Member
Junior Member
Posts: 9
Joined: 2014-08-23, 15:27 UTC

markierte Dateien mit gnuplot anzeigen

Post by *ltec »

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
User avatar
Dalai
Power Member
Power Member
Posts: 9975
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

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:

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
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:

Code: Select all

TOTALCMD#BAR#DATA
e:\gnuplot.au3
%L
c:\Programme\AutoIt3.122\Icons\filetype1.ico
gnuplot
c:\

-1
Zum Ausführen dann Dateien markieren und den Button drücken.

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
MfG Dalai
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
ltec
Junior Member
Junior Member
Posts: 9
Joined: 2014-08-23, 15:27 UTC

Post by *ltec »

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
User avatar
Dalai
Power Member
Power Member
Posts: 9975
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Post by *Dalai »

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.
ltec wrote:Kannst du mir das mit dem Starten und Löschen auch noch erklären?
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).

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
ltec
Junior Member
Junior Member
Posts: 9
Joined: 2014-08-23, 15:27 UTC

Post by *ltec »

perfekt - funktioniert wunderbar!
Vielen DANK nochmal!
Gruß
Frank
Post Reply