FHEM Forum

FHEM => Sonstiges => Thema gestartet von: the ratman am 10 Oktober 2020, 18:42:03

Titel: [erledigt] frage zu userreading mehrfaches umbenennen
Beitrag von: the ratman am 10 Oktober 2020, 18:42:03
ich mal wieder - mit üblichen dummen fragen ...

ich hab ein userreading, womit ich für bessere lesbarkeit eine endung entferne. soweit so gut.jobname_simpel { my $js = ReadingsVal($NAME,"jobname",0);$js=~s/.gcode//;$js;}

in einem speziellen fall kommts allerdings vor, dass ich das gesamte reading ändern will.
dieses reading heißt dann nicht "irgendwas.gcode" sondern "zGapTest.g". wie kann ich das in mein reading noch mit einbauen?

als kür würde ich dann gerne noch aus "_" " " machen. das dann für alle filenamen, die da so kommen würden. ist nicht wichtig, wäre nur nice2have ...

vielen dank für etwaige hilfe ...
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: amenomade am 10 Oktober 2020, 19:45:03
if ($js =~ /gcode/) { } else { } ?
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: the ratman am 10 Oktober 2020, 20:02:02
das "?" am ende versteh ich, den rest ...
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: amenomade am 10 Oktober 2020, 22:19:00
Zitat von: the ratman am 10 Oktober 2020, 18:42:03

dieses reading heißt dann nicht "irgendwas.gcode" sondern "zGapTest.g". wie kann ich das in mein reading noch mit einbauen?

Mit einem "if" ?

if readingsval in der Form etwas.gcode, dann tue was, else tue was anderes.
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: the ratman am 10 Oktober 2020, 22:32:26
sorry, aber ich weiß echt ned, wie ich das umsetzen muß - hab 0 ahnung von perl. wenn du bei mir was perl-artiges siehst, ists irgendwo hier aus dem forum abgeschrieben und sicher nicht auf meinem mißt gewachsen.

wenn du also so nett wärst, mir das in eine funktionierende form zu gießen ... sonst könnte mans lassen, weil ichs ned kann und du nur unnötig viel getippt und deine zeit verschwendet hast.

und wennst keine lust hast, trotzdem danke für deine bemühungen, mir was beizubringen. ist bei programmiersprachen aber echt vertanene liebesmüh.
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: amenomade am 10 Oktober 2020, 23:01:13
Dann musst Du besser erklären, was Du in dem Fall machen möchtest:
Zitatdass ich das gesamte reading ändern will.
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: the ratman am 11 Oktober 2020, 09:31:25
sorry, wenn ich mich blöd ausgedrückt hab - hier mal genauer (hoff ich) ...

ich hab ein reading "jobname". darin befindet sich ein text - genau genommen der file name des zu 3d-druckenden objekts.
diesem text wird im userreading "jobname_simpel" ".gcode" für die lesbarkeit abgeschnitten.

zukünftig würde ich gerne zusätzlich den text um, falls vorhanden, seine "_" befreien und in  spaces " " umwandeln.
das ist mir aber lang nicht so wichtig wie folgendes:

als drittes gibt es noch den spezialfall, in dem das reading "jobname" den exakten inhalt "zGapTest.g" (tatsächlich .g und nicht wie üblich ".gcode") hat. diesen inhalt will ich dann vollständig ersetzen durch "teste düsen kalibrierung".

wie du oben siehst, schaff ich einzelne sachen wie den .gcode, warscheinlich auch den rest. aber wohl nur einzeln.
mein problem ist: wie krieg ich alle 3 wünsche in das eine userreading gequetscht.
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: TomLee am 11 Oktober 2020, 11:05:12
Moin,

ich, als Perl-Laie, hab mich mal daran versucht:

jobname_simpel:jobname { my $js = ReadingsVal($NAME,"jobname",0);
if ($js =~/zGapTest/){
return "teste düsen kalibrierung";}
$js=~s/.gcode//;
$js=~s/_/ /;
$js;}


Gruß

Thomas
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: the ratman am 11 Oktober 2020, 11:25:01
ich als negativ-pro hab das mal übernommen. .gcode entsorgt er weiterhin brav, fehler oder warnings kommen auch nicht, rest muß ich abwarten.

wenn ich das jetzt fertig sehe, mit den richtigen klammern usw., dann glaub ich auch amenomade's erklärungsversuche zu durchblicken.
ich hasse dieses klammern gedöns und das nicht wissen wann man nen return mit klammer macht und wanns ohne klammer auch geht und warum die erde eine scheibe ist, ...! werd ich nie kapieren ...

warum kann ich z.b.:
($js =~/zGapTest/){return "zGapTest";}
nicht wie den rest
$js=~s/zGapTest.g/teste düsen kalibrierung/;
schreiben?
und warum brauchen die restlichn "$js..." keine klammern?
und was passiert eigentlich mit dem ".g" vom zGapTest?

ABER
da will ich doch mal von hardcore-noob zu laie ein fröhliches dankeschön rüber schwingen!
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: micky0867 am 11 Oktober 2020, 13:25:38
Nur mal,  weil es mich auch oft ärgert:
perl ist praktisch, aber schwer zu lesen, wenn der Programmierer mal wieder zu faul war....
Eine Konstante oder Variable am Ende einer Funktion (oder Perlmoduls) impliziert ein Return

sub XYZ {
return 1;
}

Ist identisch mit
sub XYZ {
1;
}


statt der 1 kann da auch eine  variable ( zb $js) stehen.

Als Neuling gibt man das return immer explizit mit an, um sich nicht selbst zu verwirren.
Als alter Hase freut man sich, dass man einige Tastendrücke gespart hat.

Und der Ausdruck
($js ~= /xx/) {}
Ist meines Wissens ein implizites if


Java ist bei solchen Dingen deutlich stringenter, was ich persönlich auch besser finde.
Bei der Programmierung sollte der Leitsatz gelten: "besser explizit als implizit "
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: the ratman am 11 Oktober 2020, 16:35:42
gut, haste für gesorgt, dass ich meinen glauben ans halbwissen wieder verloren habe *g*

btw, ich hab noch ein problem:

drucke grade nen test von thingi, der da heißt: "Universal_towel_hanger.gcode"
er macht mir daraus "Universal towel_hanger"

sprich: ".gcode" ist korrekt weg und der 1. unterstrich ebenfalls, der 2. unterstrich (und warscheinlich 3., 4., ...) aber nicht.

kann man da noch was machen?
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: TomLee am 11 Oktober 2020, 16:51:57
$js=~s/_/ /g;
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: amenomade am 11 Oktober 2020, 17:10:25
Zitat von: micky0867 am 11 Oktober 2020, 13:25:38

Und der Ausdruck
($js ~= /xx/) {}
Ist meines Wissens ein implizites if


Zuerst: ~= existiert nicht. Es heisst =~ https://perldoc.perl.org/5.8.8/perlop

Es gibt kein "implizites" if in Perl. Es gibt aber mehrere Formen von if:
if (bedingung) {code1} else {code2} Das ist die normale Form, die TomLee benutzt hat.

code1 if (Bedingung)

Und es gibt ein ternary operator ? :, das ähnlich wie if funktioniert:
bedingung ? code1 : code2
https://perldoc.perl.org/5.8.8/perlop#Conditional-Operator
Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: the ratman am 11 Oktober 2020, 20:18:26
erst mal vielen dank fürs "g" *g*
heißt dann wohl sowas wie "ersetze alle"

Titel: Antw:frage zu userreading mehrfaches umbenennen
Beitrag von: amenomade am 11 Oktober 2020, 21:30:06
Zitat von: the ratman am 11 Oktober 2020, 20:18:26
erst mal vielen dank fürs "g" *g*
heißt dann wohl sowas wie "ersetze alle"
Ja. Das heisst "global" = don't return after first match
Titel: Antw:[erledigt] frage zu userreading mehrfaches umbenennen
Beitrag von: the ratman am 13 Oktober 2020, 11:47:19
vielen thx an euch beide!

nachdem ich heute dremel 3d45 #4 bekommen habe - ja, 3 vor im waren früher oder später defekt (der letzte hat am sonntag nicht mehr richtig geheizt), mußte ich sowieso kalibrieren ...
was soll ich sagen? ihr seit besser als dremel, eure sachen funzen *g*

.gcode verschwindet wie erwartet, "_" frißt er auch mehr als 1 weg und der "spezialfall" funzt ebenfalls