• ベストアンサー

perlでc言語の実行処理を行いたい

perlでcのプログラム処理を行いたいのですが可能でしょうか。 内容としては、 複数のファイルをcのプログラムによって別のファイルにアウトプットする形にしたいと思っております。 よろしくお願いします。

  • Perl
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • N60-BASIC
  • ベストアンサー率80% (17/21)
回答No.3

ファイル名や引数に法則性があればファイル一覧の取得などで簡便に書ける可能性もありますが、詳細が不明なのでとりあえず力技で。 use strict; use warnings; while(<DATA>) { chomp; my($filename, $p) = split /\s+/; system("./a.out -P $p -i ${filename}.wav -o ${filename}.cep"); } exit; __DATA__ test1_1 256 test2_1 500

kakarin1217
質問者

お礼

詳しい回答ありがとうございます。 参考にしてみます。

その他の回答 (2)

回答No.2

表示がくずれるので、空白2文字を全角空白にしていることに注意。 #!/usr/bin/perl use strict; use warnings; use Inline C => 'DATA'; if ($#ARGV < 0) {   $ARGV[0] = $0; } cat(@ARGV); __DATA__ __C__ #include <stdio.h> #include <stdlib.h> void cat(SV* name1, ...) {   Inline_Stack_Vars;   int i;   FILE *fp;   char *file;   char ch;   for (i = 0; i < Inline_Stack_Items; i++) {     file = SvPV(Inline_Stack_Item(i), PL_na);     fp = fopen(file, "r");     if (fp == NULL) {       fprintf(stderr, "file open error %s\n", file);     }     else {       while (1) {         ch = fgetc(fp);         if (ch == EOF) {           break;         }         putc(ch, stdout);       }       fclose(fp);     }   }   Inline_Stack_Void; } --- $ cat tmp1.txt A B C $ cat tmp2.txt D E F $ perl -w Inline-C.pl tmp1.txt tmp2.txt A B C D E F

kakarin1217
質問者

お礼

こういった使い方もできるのですね! ありがとうございます!

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

なにをしたいのかよくわからんのだけど, たんに「別のプログラムを実行したい」というだけ? もしそうなら system とか open とかかな.

kakarin1217
質問者

お礼

ありがとうございます! 質問の内容をどう書いて良いのか分からず、あせっていたもので… Cのプログラムを実行するときにオプションをつけて実行するのですが、 そのオプションの値を変えて複数のファイルを1つずつ実行していきたいと思っています。 ./a.out -P 256 -i test1_1.wav -o test1_1.cep ./a.out -P 500 -i test2_1.wav -o test2_1.cep のような作業を100以上あるファイル一つ一つ実行していくのはとても効率が悪いのでどうしたら良いのか分からないので質問させていただきました。 わかりにくくて申し訳ありません。

関連するQ&A

  • (visual)C++から(active)perlを呼ぶ

    Vista sp1 64 bit, visual C++ 2008 express, active perl 5.1を使用しています。 しばらくの間active perlを使ってテキスト処理のスクリプトを書き溜めてきました。 最近になってC++ を使うようになり、今後はC++中心にプログラミングをしていこうと思っています。 ただ、これまで書き溜めたperlスクリプトをどうにかしてC++で再利用できないかと思っています。またテキスト処理に関してはC++よりやはりperl が優れていると感じ、C++ のプログラムを主体として必要に応じてその中にperlのスクリプトを組み込みたいと考えています。 たとえばテキストファイルを読み込みや最終的な出力するのはメインのC++で書き、各行のテキスト処理はC++からperlのサブルーチンにデータを渡して処理するというような形です。 perlのドキュメントを見る限りではperlembedがこの目的に適しているようでした。 http://perldoc.jp/docs/perl/5.10.0/perlembed.pod サンプルコードなども書いてあるのですが、どうやらunix環境、gcc(?)の例のみのようです。 windows環境でvisual C++ とactive perlを用いて C++からperlを呼び出すようなプログラムを書くにはvisual c++の設定をどのようにしたらよいでしょうか?

  • perlからcを呼び出す

    perl初心者です。すごく困っています。 perl上の数値をcプログラムで呼び込んで処理して処理結果をperlに返す、という処理がわからず困っています。誰か教えていただけませんか? 具体的にはperl上での社員の名簿のID(数字)をcでe-mailアドレスにしてperlに返すという感じです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • perlプログラム内で中間ファイルを利用するには

    perlプログラムについて 処理1 の アウトプットデータを用いて、処理2を行うというのを1つのperlのプログラム内で実装したいと考えています。 処理1のアウトプットファイルの書き出しに時間がかかり 処理2が先に動き、ファイル読み込みできずに終わってしまいます。 処理1のアウトプットファイル書き出しが終了を待ってから、処理2を実施したいのですが、 どのように記載すればよいのでしょうか? 例) perl program.pl AAA > BBB program.pl 内 open(OUT1,"> program1_work"); open(ARG,$ARGV[0]); while(<ARG>){ 処理1 print OUT1 "XXXXXX"; } close(ARG); open(ARG1,OUT1); while(<ARG1>){ 処理2 print "XXXXXX"; } close(ARG1);

  • perlの処理を遅くしたい

    CGI初心者です。わかる方教えてください。 少々古いですがactiveperl apache1.3.12を利用してperlプログラムを自宅のみで使うCGIプログラムをWINDOWS上で起動しています。 処理が長くまた同時に複数の処理をperlで処理します。ブラウザ送信ボタンよりCGIを実行してperl.exeを合計5つぐらい同時に起動します。 タスクマネージャーのプロセスの優先度の設定は実行当初「普通」になっていますが,これを実行当初から「低」にしたいと思っていますが やり方がよくわかりません。CGIの書き方,apacheの設定,ショートカットの書き方でできるんではないかと思っていますが,ご存じの方教えてください。OSはWINXPです。宜しくお願いします。

  • PerlからCへの値の受け渡し方

    こんにちわ。 今、CGIについて勉強している初心者です。 まだまだ勉強中の身ですが、一つ質問があります。 PerlからCへ値を引き渡すことはできるのでしょうか? 例えば、WEB上で値を取得する部分はPerlで作成し、受け取った値をCプログラムで処理して、その結果をまたPerlに返してやるといったことを考えています。 もし出来るなら、詳しく教えてもらえないでしょうか? ここに書ききれないというのであれば、簡単にでもいいので教えて下さい。 よろしくお願いします。

    • 締切済み
    • CGI
  • サブルーチン Perl みたいに C言語 で使うには 

    いままで数年HPを運営していたためにCGIを開発する手段として、Perl言語を使用してきました。その後、あるきっかけでC言語をするようになり、理屈上PerlとC言語が似ていました。 いままで、Perlでは開発・デバッグ等を効率よくするためサブルーチンを他のファイルにパッケージファイルとして開発していました。非常に便利でこれがC言語でも同じく使えたらいいなとつくづく思っています。 Perl言語の例 main.cgi(本体のファイル) package.pl(パッケージファイル) 本体ほファイルで実行させ、実行の途中必要なサブルーチンをパッケージファイルから呼び出します。 呼び出すには、 %渡す値=&パッケージ名::サブルーチン名; 同じようにC言語でやるときはどのようにすればいいのでしょうか?

  • C#でのPerlプログラムの実行

    C#初心者です。環境はVisualC#を使っています。 C#でGUIを作成中なのですが、GUIのあるボタンを押すと、 Perlのプログラムが実行されて、動くようにしたいのです。 どのようにすればよいでしょうか?

  • テキスト処理の速度の速い言語

    最大80MBまで増加するテキストファイルがあります。 あるアプリケーションのログファイルです。 最大80MBまで達します。 80MBまで達したら新しいファイルが作成され、 そこにログが出力されます。 このログファイルの中身を読み取り、 ある処理をして、計算結果や、必要な箇所を別のテキストファイルに 出力するプログラムを作成しました。言語はVBScriptです。 このプログラムを10分に一度実行する必要があります。 そこで問題になってしまったのが、処理時間です。 前回の処理が終わらないまま10分が経過して 次の処理が開始されてしまうのです。 特にまずいのがデータ量の多い期末や年度末です。 そこでVBScriptよりも速くテキスト処理を行える言語を教えて下さい。 BATでもJScriptでもPerlでもCでもC++でもJavaでも何でも良いです。 教えて下さい。 よろしくお願いします。

  • C言語でのファイル読み込み

    C言語でのファイル読み込みに関してお尋ねしたいことがございます。 たとえば、「test1.dat」というような数字が複数行記載されたデータファイルがあり、 それを配列に読み込んで作業をしたのちに、 同じ作業を「test2.dat」「test3.dat」・・・というようなデータファイル (これらも、test1とは異なる数字が複数行記載されたデータファイル)にも 施したい場合、どのようなループ処理をすればよいのでしょうか? perlの場合ですと比較的簡単にできたのですが、 Cの場合はどうしたらいいかわかりません。 どうぞよろしくお願いいたします。

  • C言語での実行

    C言語(ボーランドのCpad)を使っています。 いつも使ってるパソコンと違うパソコンでC言語のプログラムをし始めました。 前のパソコンと同じようにプログラムのコードをCファイルで保存して同じように新しいパソコンから開いて同じように実行ボタン押したのですが、実行できず、exeファイルが存在しませんって表示されます。 ちなみに、動かすプログラムは4つあり、そのうちの3つはちゃんと実行でき、ファイルも作成できるのですが、同じ方法でやってるあと1つのプログラムだけがうまくいきません。 4つとも同じフォルダにするようにしていて、3つはちゃんと実行できるので、フォルダが違うことはないと思います。 なぜ「exeファイルが存在しません」ってなるのか。 ちゃんとフォルダにCファイルはあるのに。 ちなみに、正確にできる3つのように、実行できると「OBJファイル」とか「アプリケーション」とかも同時に作成されます。 ただ、問題の1つのプログラムは当然、実行できず、exeファイルが存在しませんって表示されるので何も作成されません。 ボーランドのC言語、実行、ファイル、など詳しい方ぜひ教えて下さい。 同じやり方で今までのパソコンではできていたのに、パソコン変えると実行できなくなります。 フォルダやCファイルが正確ではないのかとも思いましたが、前までのパソコン通りにやっているので問題ないと思います。 ぜひアドバイス下さい。

専門家に質問してみよう