LEDサインにテキストを送信するプログラムがあります。
prismcom.exe
プログラムを使用して「Hello」を送信するには:
prismcom.exe usb Hello
ここで、たとえば、Temperatureというコマンドプログラムを使用したいと思います。
temperature
プログラムがコンピューターの温度を与えるとしましょう。
Your computer is 100 degrees Fahrenheit.
次に、温度の出力をprismcom.exeに書き込みたいと思います。
temperature | prismcom.exe usb
これは機能しないようです。
はい、私はこれに対する解決策を20分以上探してきました。いずれの場合でも、それらはWindowsコマンドライン以外の問題/ハックまたはソリューションのいずれかです。
出力を温度からprismcomにパイプする方法についての指示をいただければ幸いです。
ありがとう!
編集:Prismcomには2つの引数があります。最初は常に「usb」です。その後に来るものはすべてサインに表示されます。
これを試して。これをバッチファイル(send.batなど)にコピーし、send.bat
メッセージを温度プログラムからprismcomプログラムに送信します。
temperature.exe > msg.txt
set /p msg= < msg.txt
prismcom.exe usb "%msg%"
これは動作するはずです:
for /F "tokens=*" %i in ('temperature') do prismcom.exe usb %i
バッチファイルで実行する場合は、(両方の場所で)%%i
だけでなく%i
を使用する必要があります。
PowerShellを使用して、Cmd.exeコマンドラインでまったく同じコマンドを実行することもできます。シンプルにするためにこのアプローチを使用します...
C:\>PowerShell -Command "temperature | prismcom.exe usb"
Windows PowerShellパイプラインについて を読んでください。
また、コマンドラインでC:\>PowerShell
と入力すると、PS C:\>
モードになり、PSの書き込みを直接開始できます。
これらのプログラムをコーディングしているかどうかはわかりませんが、これはどのようにコーディングするかを示す簡単な例です。
program1.c
_#include <stdio.h>
int main (int argc, char * argv[] ) {
printf("%s", argv[1]);
return 0;
}
_
rgx.cpp
_#include <cstdio>
#include <regex>
#include <iostream>
using namespace std;
int main (int argc, char * argv[] ) {
char input[200];
fgets(input,200,stdin);
string s(input)
smatch m;
string reg_exp(argv[1]);
regex e(reg_exp);
while (regex_search (s,m,e)) {
for (auto x:m) cout << x << " ";
cout << endl;
s = m.suffix().str();
}
return 0;
}
_
両方をコンパイルしてからprogram1.exe "this subject has a submarine as a subsequence" | rgx.exe "\b(sub)([^ ]*)"
を実行します
_|
_演算子は、program1のprintf
操作の出力をstdout
ストリームからstdin
ストリームにリダイレクトするだけで、そこに座ってrgx.exeが取得するのを待っています。