簡易grepがいちばん早いのはもちろんですが、ASCIIに限るならシェルコマンドで次の方法があります。新谷 さんが書きました:grepコマンドってUTF-8環境だと遅いので、簡易grepをC言語で書いてみたいなぁと思っていた
コード: 全て選択
LANG=C grep <pattern> <file>
簡易grepがいちばん早いのはもちろんですが、ASCIIに限るならシェルコマンドで次の方法があります。新谷 さんが書きました:grepコマンドってUTF-8環境だと遅いので、簡易grepをC言語で書いてみたいなぁと思っていた
コード: 全て選択
LANG=C grep <pattern> <file>
コード: 全て選択
#include <stdio.h>
#include <string.h> // strstr()
#include <stdlib.h> // exit()
#define SIZE 256
int main(int argc, char *argv[]) {
int line;
char *key_word, read_buff[SIZE];
FILE *fp;
if (argc != 3) {printf("Usage: grep-simple [Keyword] [File]\n"); return 0;}
fp = fopen(argv[2], "r");
if (fp == NULL) {printf("file not found. %s\n", argv[2]); exit(1);}
/* メイン・プログラム */
key_word = argv[1];
line = 0;
fgets(read_buff, SIZE, fp);
while (!feof(fp))
{
line += 1;
if (strstr(read_buff, key_word) != NULL)
printf("%s", read_buff);
fgets(read_buff, SIZE, fp);
}
fclose(fp);
return 0;
}
そのとおりなのですですがシノバー さんが書きました:ASCIIに限るならシェルコマンドで次の方法があります。LANG=C はこの文にだけ有効で、他には影響を及ぼしません。コード: 全て選択
LANG=C grep <pattern> <file>
コード: 全て選択
# 01jul09 copy prefered in case cd or flash #v431jp except flash
[ $PUPMODE -eq 12 ] && echo "$PMEDIA" | grep -q 'cd' && PCOPY="yes"
grep -q
-qは検索結果を表示しないオプション
'cd' という文字列の有無によって、grep -q 'cd' && の部分で分岐が成立している。
コード: 全て選択
#include <stdio.h>
main(int argc, char* argv[]) {
int i;
for(i=1; i<argc; i++) { printf("%s ",argv[i]); }
printf("\n");
return 0;
}
コード: 全て選択
#gcc -o echo echo-simple.c
コード: 全て選択
#./echo hello world!
hello world!
コード: 全て選択
#cut-simle "区切り文字" "フィールド番号" "文字列"
コード: 全て選択
#cut-simple "|" 3 "abiword|7764K|wordprocessor|puppy4|"
コード: 全て選択
wordprocessor
コード: 全て選択
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc,char *argv[])
{
if (argc != 4)
{
printf("cut-simple ヘルプ:\nこれはcutコマンドのシンプル版です。\n\n");
printf("使用法: \n");
printf("cut-simle [区切り文字] [フィールド番号] [文字列] \n\n");
printf("例1:\n#cut-simple A 2 xxxAyyyyAzzzzA \n");
printf(".....この場合、文字列「xxxAyyyyAzzzzA」からAで区切られた2番目のフィールドを取り出す、という意味です。\n");
printf("yyyy が出力されます。\n\n");
printf("例2:\n");
printf("#cut-simple \"|\" 3 \"abiword|7764K|wordprocessor|puppy4|\" \n");
printf("wordprocessor \n\n");
printf("注意: デフォルトの区切り文字は設定されてませんので必ず指定して下さい。\n");
exit(1);
}
int cont;
char buff1[10]; //第1引数のために使用するグループ
char *pb1;
char buff2[10]; //第2引数のために使用するグループ
char *pb2;
int i;
char buff3[256]; //第3引数のために使用するグループ
char *pb3;
char temp[256]; //繰り返し処理のために使用するグループ
char *iii;
/***** 第2引数から数字を変換、最終的に i に代入される、なんか納得いかない処理 ******/
pb2 = buff2;
strcpy(pb2,argv[2]);
i = (buff2[0] - 48); //'0'の文字コードが48なので
// printf("第2引数の数字: %d\n",i);
pb1 = buff1;
strcpy(pb1,argv[1]); //ポインタの初期化と引数1の前処理
cont = 1;
if(i != cont){
pb3 = buff3;
strcpy(pb3,argv[3]); //ポインタの初期化と引数3の前処理 (第2引数が2以上の場合)
iii = temp; //第2引数が2以上の場合の場合の1回目のソート
iii = strstr(buff3,buff1);
++iii;
++cont;
}
else{
iii = temp; //ポインタの初期化と引数3の前処理 (第2引数が1の場合)
strcpy(iii,argv[3]);
}
/***** 第2引数が2以上の場合の場合の2回目以降のソート *****/
while(i > cont){
strcpy(pb3,iii);
iii = strstr(buff3,buff1);
++iii;
++cont;
}
//最終処理
// 例: #cut-simple A 2 xxxAyyyyAzzzzA ならばこの時点で yyyyAzzzzA までソートされている
while(*iii != *pb1 ){
printf("%c",*iii); // ↑の例だとAに出会うまで1文字づつ出力
++iii;
}
// ↑の例だと最終的に yyyy が出力される
printf("\n");
return 0;
}
だめっすか.....orz。>慣れてる人は、ポインタの指すアドレスが「カシャ、カシャッ」という感じで頭の中で動いてるんだろうか.....動いてるんだろうな.....。
その程度の理解では早晩行き詰まるかとw
C初心者の僕にはまだピンときませんが、しかしこれは良いアドバイスを頂いたかもしれません。頭の片隅に留めておくです。僕自身、高級言語のポインタを覚えたのはCが最初だったのですが、今考えるとCでポインタ(の概念)を覚えるのは余り賢明でないような気がします...
停止ボタンで再生停止、ウィンドウの右上「x」ボタンで再生停止&アプリ終了、という感じです。Madplayの終了はどのように?
これはGxineの仕様なんじゃなかろうかと....(再生には問題ないと思います)。Newsで、AUTHOR、COPYRIGHTが不明なタグと出ています。
やや話が逸れますが、パピーには「setvol」というちょっと面白いボリューム調整プログラムが収録されています。みのむし さんが書きました:音は聞けるのですが、ボリュームを100%にしても大音量になりません。
コード: 全て選択
#setvol 0 80 80