CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C言語で正規表現 - PCRE編

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

C言語で正規表現、第2弾。PCREを使ってみた。

PCREは perl5コンパチな正規表現ライブラリ。
前エントリのコメントで教えていただいたんで早速。

PCRE - Perl Compatible Regular Expressions

libpcre.a はすでに入ってたので、apt-getで libpcre3-dev だけ入れた。
以下、gistに貼ったpcreを使ったサンプルコード。

動作例。svn infoの Revision: の番号を取得するサンプルです。

$LANG=c svn info http://svn.apache.org/repos/asf/subversion/trunk > info.txt
$ cat info.txt |./pcre-eg.c 
1243564$

あっけないほど簡単で、使いやすい。便利だ。
これなら LL系に弱い人にも使いこなせる気がする。

例えば、svnのリビジョン番号のファイルを作成したいとき、

touch r`LANG=c svn info|grep '^Revision:'|cut -d ' ' -f 2`.log
とか、
touch r`LANG=c svn info|perl -ne 'print $1 if(/^Revision: (\d+)/)'`.log

とかワンライナーで書くけど、
grepってなんすか?な人は意外に多いし、
perlは読めないんで!と断られたりもするけど、
みんな大好きc言語だよ!なら受け入れられそう。

touch r`LANG=c svn info|../pcre.c`.log

と、こんな感じかな。


詳説 正規表現 第3版詳説 正規表現 第3版
(2008/04/26)
Jeffrey E.F. Friedl

商品詳細を見る

C言語で正規表現

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

C言語で正規表現を使ってみた。
といっても、ライブラリたたいただけだけど。

まず、コード。

使用例

$ LANG=c svn info http://svn.apache.org/repos/asf/subversion/trunk|tcc -run ./regex.c 'Revision: (.*)' 2
Revision: 1243192,1243192

$ echo 'one-two-tree-daa' |tcc -run ./regex.c '([a-z]+)-([a-z]+)' 3
one-two,one,two

$ LANG=c svn info http://svn.apache.org/repos/asf/subversion/trunk|tcc -run ./regex.c '([[:alpha:][:blank:]]+): (.*)' 3
Path: trunk,Path,trunk
URL: http://svn.apache.org/repos/asf/subversion/trunk,URL,http://svn.apache.org/repos/asf/subversion/trunk
Repository Root: http://svn.apache.org/repos/asf,Repository Root,http://svn.apache.org/repos/asf
Repository UUID: 13f79535-47bb-0310-9956-ffa450edef68,Repository UUID,13f79535-47bb-0310-9956-ffa450edef68
Revision: 1243192,Revision,1243192
Node Kind: directory,Node Kind,directory
Last Changed Author: hwright,Last Changed Author,hwright
Last Changed Rev: 1242958,Last Changed Rev,1242958
Last Changed Date: 2012-02-11 07:10:34 +0900 (Sat, 11 Feb 2012),Last Changed Date,2012-02-11 07:10:34 +0900 (Sat, 11 Feb 2012)

POSIX準拠なregex.hを使った。
とりあえずgccで使えたんだけど、VCでも鬼車を使えばできるらしい。

使い方の詳細はググるなり、man 7 regex をみるとして、
[a-z]とか{1,2}とか(hoge|fuga)とか(.*)とか(.+)が使える。
あと、isalphaなどのisな関数を[:alpha:]と使えるとかかな。

にしても、使い勝手がよくない。
本格的に組み込むならwrapper関数を作る必要があるだろうし、
鬼車のようなライブラリを組み込むのが楽か、
C言語なら1から自作するほうがそれらしいかな。

Beautiful Code読んだ人は自作かな。


ビューティフルコードビューティフルコード
(2008/04/23)
Brian Kernighan、Jon Bentley 他

商品詳細を見る

Javascrptで TwitterのRSSを取得する

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

JavaScriptで twitter の RSSを取得する。

つぶやきのまとめはブログなどのサービス使うので十分。
でも、ちょっとRSSが取得したかったので書いてみた。

twitterのRSSの取得は REST API を使えば簡単。
REST API Resources | Twitter Developers
調べてみると、user_timeline のURLを書くだけいいと分かった。
それだとつまんないのでもう少し情報入れて、gist にスクリプトを貼った。

そのまえに動作サンプル。



動作させたスクリーンショット

twit-prof.png

最後にgistに貼ったスクリプト




Javascript: The Definitive Guide (Definitive Guides)Javascript: The Definitive Guide (Definitive Guides)
(2011/05/10)
David Flanagan

商品詳細を見る

Twitter API ポケットリファレンス (POCKET REFERENCE)Twitter API ポケットリファレンス (POCKET REFERENCE)
(2011/07/15)
山本 裕介

商品詳細を見る

Twitterで英語をつぶやいてみる (生活人新書)Twitterで英語をつぶやいてみる (生活人新書)
(2010/05/07)
石原真弓

商品詳細を見る

C言語だって成長する! 標準がC11(C1X)にアップデート

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

C言語の標準がC11(C1X)にアップデートされた。
Unicode、ジェネリックマクロ、マルチスレッド、無名構造体/共用体などなど。

もともとC11については下の記事で知った。
ISO Updates C Standard - Slashdot

早速、規格を見てみようと思ったのだけど、
正式なものはちょっとお高いので、元にしたドラフト版を確認する事にした。
www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

...と、見てみたら600頁以上あってしんどいので挫折。
代わりに wikipediaにアップデート内容の記事を見てみた。
C1X - Wikipedia, the free encyclopedia

Alignment specification
C言語だとコンパイル先の環境の実メモリに合わせて、
コンパイラのプラグマなどでローカルに指定してたのが、
C言語としてサポートしたという事だろう。

The _Noreturn function specifier(10/28修正)
戻らない関数の宣言。
下に quick_exit()もあるし、よっぽど終了失敗する事が多いのだろう。
N1570にあったサンプルコードを下につける。

_Noreturn void f () {
abort(); // ok
}
_Noreturn void g (int i) { // causes undefined behavior if i <= 0
if (i > 0) abort();
}

Type-generic expressions using the _Generic keyword(10/28修正)
名前からピンとこなかったけど、汎用マクロかな。
Cのマクロで、C++の関数オーバロードのようなことをする。
コードで見たほうが早いか。

#define cbrt(X) _Generic((X), long double: cbrtl, \
                              default: cbrt, \
                              float: cbrtf)(X)

Multithreading support
マルチスレッド関係。Mutex、condition variable、threadとからしい。

Improved Unicode support
unicodeサポート。
char16_t/char32_tにUTF-16/UTF-32を入れる。
文字列は u"abc" のように書く。

Removal of the gets function
gets関数の廃止。
代用には gets_s がいいらしいし、使えなければ fgets で。
よっぽど悪用されやすかったのだろう。

Bounds-checking interfaces (Annex K)
境界チェック。
gets_s のように _s を付けた関数が増えてる。
Visual-C++のManaged-C と思えばいいのかな?

Analyzability features (Annex L).
デバッガ関係かな?

More macros for querying the characteristics of floating point types
浮動少数に関するマクロの追加。
仮数や指数がわかるようになったらしが、C99に無かったっけ?

Anonymous structures and unions
無名構造体、共用体。
ネストする時に便利。

struct T { int 
  tag;
  union {
    float x;
    int n;
  };
};.

Static assertions
コンパイル時にプリプロセッサで assert する。
boostのBOOST_STATIC_ASSERTに相当するっぽい。

An exclusive create-and-open mode ("…x") for fopen
排他的 fopen。
ロックファイルとして使うといいみたい。
POSIXの O_CREAT|O_EXCL 相当らしい。

The quick_exit function as a third way to terminate a program
exitに失敗するようなケースで終了させる方法。
そんなことあるのか。。

Macros for the construction of complex values
複素数関係のマクロ。


プログラミング言語C 第2版 ANSI規格準拠プログラミング言語C 第2版 ANSI規格準拠
(1989/06/15)
B.W. カーニハン、D.M. リッチー 他

商品詳細を見る

Boost C++ LibrariesプログラミングBoost C++ Librariesプログラミング
(2007/07)
稲葉 一浩

商品詳細を見る

実例で学ぶGCCの本格的活用法―高機能コンパイラのオプション・コマンドを一つ一つていねいに解説 (TECHI―Embedded Software)実例で学ぶGCCの本格的活用法―高機能コンパイラのオプション・コマンドを一つ一つていねいに解説 (TECHI―Embedded Software)
(2006/07)
岸 哲夫

商品詳細を見る

[C]選択ソートをする

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

C言語で選択ソート。

基本だけどたまには書いて筋トレ。

バブルソートの方が良い気がしてたけど、Wikipediaによれば
バブルソートと比較すると、「比較回数」は同じだが「交換回数」が少ないので、選択ソートの方が高速である。
らしい。そ、そんな気もしなくはない。。

書いた選択ソートを gist において、以下に貼りつけた。

実行例。
100個のランダム値をソートした際の比較、交換回数で、 前回のバブルソートなどの結果も合わせてみてみる。

$ for i in *.c ; do gcc $i && ./a.out ; done
         bblsort: cmp=4950.0, swp=2472.6, xor=197DFD2F
        bblsort2: cmp=4768.0, swp=2472.6, xor=197DFD2F
           qsort: cmp= 541.8, swp=??????, xor=197DFD2F
         selsort: cmp=4950.0, swp=  94.8, xor=197DFD2F

確かに交換回数がすごく少ないので、バブルソートより効率良さそうだ。
ただし、ランダムなデータであればだと思う。

アルゴリズム辞典によれば単純選択法とも呼ぶらしいんだけど、
確かに単純で分かりやすいと思う。

ソート時間のばらつきを無くし、バグのはいり込む余地のない
選択ソートを採用しました...という事例がありそう。



C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)
(1991/03)
奥村 晴彦

商品詳細を見る

«  | HOME |  »

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。