アプリ版:「スタンプのみでお礼する」機能のリリースについて

perlでcのプログラム処理を行いたいのですが可能でしょうか。

内容としては、

複数のファイルをcのプログラムによって別のファイルにアウトプットする形にしたいと思っております。

よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

詳しい回答ありがとうございます。

参考にしてみます。

お礼日時:2011/10/06 19:41

表示がくずれるので、空白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
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/10/04 15:54

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

n とかかな.
    • good
    • 0
この回答へのお礼

ありがとうございます!

質問の内容をどう書いて良いのか分からず、あせっていたもので…

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以上あるファイル一つ一つ実行していくのはとても効率が悪いのでどうしたら良いのか分からないので質問させていただきました。

わかりにくくて申し訳ありません。

お礼日時:2011/10/04 16:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!