NCVCサポート掲示板(仮)

スクリプトの統合のコツを教えて頂きたいです。

4 コメント
views

こんにちは。
いつも大変お世話になっております。
先日回答頂いた件についてはおかげさまで解決致しました。
https://zawazawa.jp/b5almsd0ra1jvhw3/topic/45
本当にありがとうございました。
以下について、またご助言頂きたく投稿させていただきます。

decycle_G82.plで穴加工を変換後change_for_laser.plを適用したいです。

decycle_G82.pl内にchange_for_laser.plの30~34行、45~49行、55~80行をそれぞれ
色々な場所に配置してみているのですが、Gコードが生成されません。
change_for_laser.plの30~34行、45~49行だけを配置した状態ではGコード変換は出来ましたが
change_for_laser.plの55~80行を何処に配置してもGコードの出力ができない状態です。

何かヒントを頂きたいです。
よろしくお願い致します。

はじめに
作成: 2025/05/02 (金) 10:24:56
通報 ...
1

スクリプト作成者のishiiです。

スクリプト(G82)の結果をスクリプト(lazer)で処理するだけであれば
G82の whileループ内の

print OUT <・・・>;  を push(@nc, <・・・>); 、
print OUT; を push(@nc, $_);

で置き換え、

G82の whileループを抜けてから
lazerの処理として

while(< IN >){ の代わりに

for (my $i = 0; $i <= $#nc; $i++){
 $_ = $nc[$i];

としてみてはいかがでしょうか。

2
はじめに 2025/05/02 (金) 19:49:55 4675d@93a97 >> 1

ishii様
早速返信頂きましてありがとうございます。

作成者様から改変の提案していただき、本当にありがとうございます!
早速頂いた文をそのまま置き換えましたがエラーでした。
Perlはよく理解できず悪戦苦闘しています。
arduinoを少し弄る程度の知識しかありませんが

>>print OUT <・・・>;  を push(@nc, <・・・>); 、
>>print OUT; を push(@nc, $_);

の @nc の部分、

>>while(< IN >){ の代わりに
>>for (my $i = 0; $i <= $#nc; $i++){
>> $_ = $nc[$i];

の $#nc と $nc は宣言が必要になりますよね…

頂いた情報を無駄にしないようしっかり調べたいと思います。
ありがとうございました。

3
ishii 2025/05/03 (土) 17:34:36 修正

宣言したほうが良いのかもしれませんが、宣言しなくても動くと思います。

前提として、G82のスクリプトを単独で実行した結果ファイルに
lazerのスクリプトを実行すると想定通りに変換されるということでよいでしょうか。

試しに、以下の文をPerlスクリプトのファイルにしてみてください。
(まがら様の投稿を受けて一部修正しました。ありがとうございます。
 1行目のみそのまま投稿できなかったため、
 1行目のperの後のLを小文字に置き換えてください)

#! /usr/bin/perL

$pre_file= $ARGV[0];
$out_file= $ARGV[1];
open(IN,$pre_file);
open(OUT,">$out_file");

while(<IN>){
 #G82の処理の部分を想定
 push(@nc,$_);
}
close(IN);

print "[before]\n"; ##
print @nc;  ##
print "\n\n";  ##

print "[after]\n";  ##

for(my $i=0; $i < $#nc; $i++){
 #lazerの処理の部分を想定
 $line= "N" . ($i+1) . " " . $nc[$i];
 print OUT $line;
 print $line;  ##
}
close(OUT);

そのPerlスクリプトをコマンドプロンプトで実行してみてください。
(なお、## の行はコマンドプロンプト上に出力するためのものです )

perl␣<スクリプトファイルのパス>␣<入力ファイルパス>␣<出力ファイルパス>

実行に成功すれば、いくつかのヒントになると思います。

4
まがら 2025/05/03 (土) 20:17:25

こんにちは

コードを貼るときのコツは,バッククオート3つで括るとそれっぽく貼り付けできます.

print "Hello World\n";

詳しくは「Markdown コード」で検索

横やり失礼しました.よいGWを!