dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

grepで固定文字列の検索

2011-02-22 22:50:21 | linux
grep で文字列を検索するときに、-F を使うとパターンではなく、指定文字列での文字列的な一致になります。

$ cat test.txt
http://abc.com/def/ 200
http://abc.com/ 200

$ grep -F 'http://abc.com/*' test.txt

$ grep 'http://abc.com/*' test.txt
http://abc.com/def/ 200
http://abc.com/ 200

grep の引数をユーザが指定するようなアプリケーションの場合には、パターン文字列のエスケープを考慮しなくてよいので、-F オプションが便利そうです。

ちなみに、tsv ファイルを検索するときなどに、タブを検索文字列に含める場合には、bash では Ctrl-v TAB(Ctrl-iも可) でタブを入力できます。
emacs でプログラム中にタブを埋め込むなら、Ctrl-q TAB(Ctrl-i) です。

rubyでexcelファイルをダウンロードさせるCGI

2011-02-22 01:01:30 | ruby
rubyのCGIでexcelファイルをダウンロードさせるようにする方法です。
Spreadsheet::Workbook#write() の引数に STDOUT を指定するとエラーになるので、Tempfile に書き出しておいて rewind してから read して出力しています。
普通のファイルに書き込むと、エラー処理などが面倒ですが、Tempfile ならファイルが残らないので便利です。


#!/usr/local/bin/ruby

KCODE = 'u'
require 'jcode'
require 'cgi'
require 'tempfile'
require 'rubygems'
require 'spreadsheet'

# シートを作成
book = Spreadsheet::Workbook.new
sheet = book.create_worksheet
sheet[0, 0] = 'テスト1'
sheet[0, 1] = 'テスト2'

# シートを出力
Tempfile.open('/tmp') do |tf|
book.write(tf)
tf.rewind

# ダウンロードファイル名
file_name = "download.xls"

print("Content-Type: application/octet-stream\n")
print("Pragma: private\n")
print("Content-Disposition: attachment; filename=\"#{file_name}\"\n")
print("\n")
print(tf.read)
end




16進ダンプ

2011-02-15 23:43:35 | linux
テキストファイルなどを16進ダンプする方法の備忘録です。

$ od -tx1z {ファイル名}
0000000 74 65 73 74 0a e3 83 86 e3 82 b9 e3 83 88 0a >test...........<
0000017

zをつけない場合には、右側の文字が表示されません。

$ od -tx1 {ファイル名}
0000000 74 65 73 74 0a e3 83 86 e3 82 b9 e3 83 88 0a
0000017


レゴでストライクバルキリー(バトロイド)

2011-02-13 21:40:29 | LEGO
ストライクバルキリーのバトロイドです。
背中のビーム砲は前に向くようになっています。







レゴでストライクバルキリー(ガウォーク)

2011-02-12 21:44:31 | LEGO
ストライクバルキリーのガウォークです。
足の強度が足りなくて、自立できません。。。











レゴでストライクバルキリー(ファイター)

2011-02-11 23:04:55 | LEGO
先日作成したレゴのバルキリーに、ストライクパックをつけてみました。
ちょうどいい色のブロックがなかったので、ストライクパックは黒にしてしまいました。






rubyでtsvファイルからxlsファイルを作成

2011-02-10 20:32:45 | ruby
ruby の spreadsheet ライブラリで tsv ファイルを xls ファイルに変換する方法です。
ちなみに、xls ファイルの出力を標準出力にしようとしましたが、Spreadsheet::Workbook#write の引数に STDOUT を指定するとエラーになってしまいました。


#!/usr/local/bin/ruby
#
# usage: tsv_to_xls.rb {xls}
#

$KCODE = 'u'
require 'jcode'
require 'rubygems'
require 'spreadsheet'

# 出力先
xls_file = ARGV[0]

# sheet
book = Spreadsheet::Workbook.new
sheet = book.create_worksheet

# tsv 読み込み
STDIN.each_with_index do |line, r|
a = line.chomp.split("\t")
a.each_with_index do |value, c|
sheet[r, c] = value
end
end

# 出力
book.write(xls_file)

rubyのCGIでアップロードされたファイルを読み込む

2011-02-09 22:07:52 | linux
rubyのCGIで、アップロードされたファイルを読み込む方法の備忘録です。

cgi = CGI.new
file = cgi.params['file_name'][0]

file でアップロードされたファイルのデータを扱うことができます。
アップロードされたファイルのサイズが 10240 バイト未満の場合には、StringIO、10240 バイト以上の場合には Tempfile のオブジェクトになります。

もし、両方とも Tempfile で扱いたい場合には、以下のようにして StringIO のデータをTempfile に書き込んでしまえばよいでしょう。

if file.class == StringIO
tf = Tempfile.new
tf.print(file_data.read)
tf.rewind
file = tf
end

formでのファイルのアップロード

2011-02-09 01:40:23 | ウェブサービス
form でファイルをアップロードするには、form タグの enctype に multipart/form-data を指定して、<input type="file"> でファイルを選択するようにします。

<form name="upload" method="post" action="upload.cgi" enctype="multipart/form-data">
<input type="file" name="file_name">
<input type="submit" value="送信">
</form>

apacheでディレクトリ一覧のファイルソート順を変更

2011-02-02 21:30:50 | ウェブサービス
apacheで Options +Indexes を指定すると、クライアントからディレクトリのファイル一覧を閲覧することができるようになりますが、デフォルトではファイル名の昇順でソートされます。

ファイル名に日付を入れると、最新ファイルが上に表示されてほしい場合があります。
そんなときには、
IndexOrderDefault Descending Name
を追記します。
.htaccessに書いてもOKです。