2016-04-14 4 views
2

I CSV-Ausgabe von einem anderen Programm wie folgt haben:Modiying String-Eingang aus CSV das Vorzeichen zu bestimmen

1.0s,34.56a 
3.0s,352.12a 
5.0s,1995.34b 

Die erste Spalte enthält x-Werte (die s vernachlässigt werden kann), während die zweite Spalte enthält y-Werte. Mit Gnuplot 5 ist es möglich, die Werte einfach zu plotten, aber ich muss das Vorzeichen jedes Wertes in der zweiten Spalte bestimmen (alle Werte gefolgt von a sollten positiv sein, alle Werte gefolgt von b sollten negativ sein).

Während die Bestimmung des Zeichens einfach sein sollte wie beschrieben in this post, habe ich Schwierigkeiten, jeden y-Wert dynamisch zu teilen. Laut dem Gnuplot-Handbuch sollte die Verwendung einer Teilzeichenfolge möglich sein, aber ich kann nicht herausfinden, wie ich der Teilzeichenfolge mitteilen kann, dass sie nur den letzten Wert enthält.

Antwort

3

Um das letzte Zeichen eines Strings s zu erhalten, verwenden

s[strlen(s):] 

Um Ihre Datendatei korrekt, verwenden Sie die folgende analysieren:

set datafile separator ',' 
parse(s) = (s[strlen(s):] eq "b" ? -1 : 1) * real(s[:strlen(s)-1]) 
plot 'data.dat' using 1:(parse(strcol(2))) 
0

ich es einfach gelöst, die Entsendung meine Lösung für andere . Meine Lösung basiert auf this answer und this answer.

Ich habe eine neue Funktion customydata(s)=(s[strlen(s):*]) erstellt, die das letzte Zeichen einer Zeichenfolge zurückgibt.

Der Plot-Befehl ist einfach plot 'heelingdata.dat' u 1:(customydata(strcol(2)) eq 'a' ? (-1)*$2 : $2) w lp, wo ich meine Zeichenfolge in die oben genannte Funktion einfügen und überprüfen, ob es a ist.