RECOMMEND

ハッカーと画家
ハッカーと画家
プログラマ必読。→感想


C言語ポインタ完全制覇
C言語ポインタ完全制覇
C言語 対ポインタ最強兵器。
感想

COUNTER

MONTHLY

CATEGORIES

RECENT ENTRIES

RECENT COMMENTS

RECENT TRACKBACKS

twitter

Twitterボタン

APPENDIX

sugarball

こまごまと、プログラミング関係のtipsを。

[スポンサー広告]スポンサーサイト 

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

[UNIX]8進数に気をつける 

シェルで整数値を扱う時の注意。

ゼロ「0」で始まる数値は、8進数扱いになります。
$ echo $(( 017 ))
15


「8進数の17」→「10進数の15」という具合になります。ちなみに、「$(( ))」で括られた値は数値として扱われます。

で、ここで注意。
$ echo $(( 08 ))
bash: 08: value too great for base (error token is "08")

このように、8進数では「08」という値を表現できません。なので、数値計算する場合はゼロサプレスして10進数として扱った方が無難です。シェルを作る場合は、くれぐれもご注意を。
スポンサーサイト

[UNIX]現在日付を指定のフォーマットで表示する 

現在の日付と時刻を表示するにはdateコマンドを使いますが、フォーマットを指定してやることで任意の書式で表示させることができます。

書式指定をせずにdateコマンドを実行した場合
$ date
Sat Nov 18 21:36:08 2006


書式を指定した場合
$ date '+DATE: %Y/%m/%d%nTIME:%H:%M:%S'
DATE: 2006/11/18
TIME:21:45:10


書式を指定するには、dateコマンドに、シングルクォートで括られた書式を与えればよい。ここで、シングルクォートの次の文字は「+」にしなければならない。(「date '+・・・'」のように)

書式の指定方法は以下のとおり。(Manpage of DATEより)

%%文字としての %
%n改行
%t水平タブ


■時刻の欄
%H時 (00..23)
%I時 (01..12)
%k時 ( 0..23)
%l時 ( 1..12)
%M分 (00..59)
%pAM あるいは PM のロケール
%r時刻、12時間 (hh:mm:ss [AP]M)
%s1970-01-01 00:00:00 UTC からの秒数 (標準外の拡張)
%S秒 (00..61)
%T時刻、24時間 (hh:mm:ss)
%Xロケールによる時刻の表現 (%H:%M:%S)
%Zタイムゾーン (例 EDT)、もしタイムゾーンが決定できないならば無


■日付の欄
%aロケールによる省略形の曜日の名前 (Sun..Sat)
%Aロケールによる完全に表記した曜日の名前、可変長 (Sunday..Saturday)
%bロケールによる省略形の月の名前 (Jan..Dec)
%Bロケールによる完全に表記した月の名前、可変長 (January..December)
%cロケールによる日付と時刻 (Sat Nov 04 12:02:33 EST 1989)
%d日(月内通算日数) (01..31)
%D日付 (mm/dd/yy)
%h%b と同じ.
%j年内通算日数 (001..366)
%m月 (01..12)
%U日曜日を週の最初の日としたときの年内通算の週の番号 (00..53)
%w週のうちの曜日 (0..6) で 0 が日曜日に対応
%W月曜日を週の最初の日としたときの年内通算の週の番号 (00..53)
%xロケールによる日付の表現 (mm/dd/yy)
%y年の最後の二つの数字 (00.99)
%Y年 (1970...)

[awk]awkの基本 

awkの基本的な使い方を紹介します。

awkに簡単なデータファイルを処理させるという事をやってみます。まずは、データファイルを用意します。
data.txt
line1_f1 line1_f2 line1_f3 line1_f4
line2_f1 line2_f2 line2_f3 line2_f4

次に、awkのスクリプトファイルを用意します。「スクリプトファイル」と呼びましたが、要はawkのプログラムが記述されたファイルのことです。
test1.awk
{
print $2;
}
このプログラムの意味は、一行ずつ、2フィールド目の要素を出力するというものです。まぁ、後でプログラムを動かすので、そちらで結果を見てください。

これで、スクリプトファイルとデータファイルが用意できました。次に、データファイルをスクリプトファイルで処理します。
$ awk -f test1.awk data.txt
line1_f2
line2_f2
ここで、オプション「-f」は、スクリプトファイルを指定するという意味です。

となります。ちなみに、標準入力から(パイプ経由ってこと)データを入力することもできます。
$ cat data.txt | awk -f test1.awk
line1_f2
line2_f2
同じ結果になりました。

また、コマンドライン中にスクリプトを記述することもできます。
$ cat data.txt | awk '{print $2;}'
line1_f2
line2_f2

$ awk '{print $2;}' data.txt
line1_f2
line2_f2
どちらも、同じ結果になります。

また、キーボードからの入力も可能です。
$ awk -f test1.awk
a b c d
b
ここで、2行目の「a b c d」はキーボードからの入力で、3行目の「b」が結果として返されます。続けて入力を行うことも可能で、終了する場合は[Ctrl-C]で終了します。


[awk]文字列の頭からn文字抽出する 

awkで文字列の頭からn文字抽出するには、substr関数を使う。
$ echo "1234567890" | awk '{print substr($0,1,3);}'
123


「123」が出力される。
ここで、substrの引数
・「$0」は入力文字列
・「1」は文字列の何文字目から抽出を始めるか
・「3」は何文字抽出するか
である。

当然、substrを使って、「n文字目からm文字抽出する」ということも可能である。
$ echo "This is your pen." | awk '{print substr($0,9,4);}'
your

[cygwin]cygwinのvi(vim)で日本語入力 

まず、cygwinで何ができるかと言うと、WindowsからUNIXのツールを使えるようになります。

で、UNIXの標準的なエディタであるvi(実際はvim)で日本語を入力する方法を紹介。

ホームディレクトリ下に、.vimrc ファイルを作り、以下の内容を記述します。
set enc=sjis


次に、日本語入力を行いたいときに、[Alt]+[半角/全角]を入力すると、viで日本語入力ができます。

日本語入力を解除したいときは、[半角/全角]だけでOKです。

# これだと、文字コードがSJISで保存されると思います。
# EUCで日本語入力ってできませんかね…

[Java]文字列比較の注意点 

結論から言えば、Javaの文字列比較はequalsメソッドを使いましょう。


Javaでは基本的に、文字列の比較はポインタの比較であるため、if文で(文字列1 == 文字列2)のように比較してはいけない。
String strA = "STRING";
String strB = "STR";
strB += "ING";

// 比較の結果はfalseとなる
if (strA == strB) {
System.out.println("この分岐は通らない");
}else{
System.out.println(strB);
}

これを実行すると、
STRING
となり、Stringオブジェクトの比較は、文字の内容の比較ではないことがわかる。

しかし、JavaのVMには奇妙な仕様がある。
String strA = "STRING";
String strB = "STRING";

if (strA == strB){
System.out.println("等しい!");
}

これを実行すると、
等しい!
となってしまう。これは何故かというと、Javaでは「同じ内容の文字列リテラル(「""」で閉じられた文字列)のインスタンスをひとつしか生成しない」という仕様のため、上記のstrAとstrBの比較(ポインタの比較)が一致している、とみなされる。


常に一定の結果を文字列リテラルでも、appendメソッドで接続した文字列でも、「+」演算子で接続した文字列でも、同じ比較結果を得ようとするなら、equalsメソッドを使うこと。
String strA = "STRING";
String strB = "STR";
strB += "ING";

// equalsメソッドの結果はtrueとなる
if (strA.equals(strB)) {
System.out.println("一致!");
}else{
System.out.println("一致しない!");
}

結果:
一致!



結論:文字列の比較はequalsメソッドを使うこと。

※Java1.4.x系で確認しました。

[SQL]Oracleで文字列を連結させる 

OracleでSQLの出力結果の文字列を連結する場合、
select code || price from catalog

結果: A-041B4000
------____
code price のように連結される

もしくは、
select CONCAT(code,prise) from catalog
結果: A-041B4000


※このとき、どちらの方法を用いてもSQL文にDISTINCT句は使えなくなる。

[Java]Stringオブジェクトの代入 

かなり当たり前な話だが、Stringクラスの代入演算はコピーである。
String s1 = "test";
String s2 = null;

s2 = s1;
s2 += " String Substitution";

System.out.println("s1:" + s1);
System.out.println("s2:" + s2);

結果:
s1:test
s2:test String Substitution

となり、Stringオブジェクトの代入は、値のコピーである。

[VB6]インスタンスの型(クラス)をチェックする 

例えば、CollectionオブジェクトからItem(index)メソッドでインスタンスを取得した時に、インスタンスの型(クラス)をチェックする方法。
If TypeOf objInstance Is ClassName Then ...
■objInstance:変数(オブジェクト)名
■ClassName:クラス名
言い換えれば、objInstanceがClassName型かどうか判定している。
objInstanceがClassNameクラスのインスタンスなら、Trueとなる。
VBでOOPする時に使うかも。

[Excel]ショートカットキーでシートを移動する。 

Excelで素早くシートを移動するチョイ技。

左隣のシートに移動:[Ctrl] + [Page Up]
右隣のシートに移動:[Ctrl] + [Page Down]

[Java]現在日付をyyyy/MM/ddの形式で出力する。 

日付をいろいろな書式で出力したい時の参考に。
Dateクラスをnewすると、現在日付がセットされる。
SimpleDateFormatクラスを使用して年月日の書式を整える。
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

Date d = new Date();
DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
System.out.println(df.format(d));

<<実行結果>>
2005/01/07

[Java]try...catch...finally...throw...の実行順序 

try...catch...finally...throw...の実行順序
try 中で例外が発生すると、catch句へ移動する。

catch句中で例外をスローした場合、直ちにfinallyが実行される。その後、スロー先へ飛ぶ。
try{
System.out.println("①");
// 例外を発生させる
throw new Exception();
}catch(Exception e){
System.out.println("②");
throw e;
System.out.println("この行は実行されない。");
}finally{
System.out.println("③この行は実行される。");
}
System.out.println("④この行は実行されない。");

<<実行結果>>


③この行は実行される。

[LINUX]ノートPC(PC-MV1-C1F)で無線LAN on Vine Linux 3.2 

OSはVine Linux 3.2で、PC-MV1-C1Fで無線LANを使う方法。

まず、/etc/modules.confを確認。
# cat /etc/modules.conf

alias eth0 orinoco_pci
コイツ「alias eth0 orinoco_pci」がPC-MV1-C1Fの無線LANデバイスのはず。modules.conf記述が無かったら追加すること。

次に、以下のコマンドを実行。
# iwconfig eth0 key s:(無線LANのWEPキー)
# iwconfig eth0 essid (無線LANのESSID)


すると、/etc/sysconfig/network-scripts/ifcfg-eth0に以下の記述が追加される。
SSID="(無線LANのWEPキー)"
KEY=(無線LANのESSID)


あとは、/etc/rc2.d/S10network start でネットワークの再認識(?)を行えばOK。
# /etc/rc2.d/S10network start


そうそう。「Fn-F1」で無線LANを有効にするのを忘れずに。これで無線LANが使えるはず。

[UNIX]現在のシェルを確認する 

$ echo $SHELL
/bin/bash

「$SHELL」とすると、現在のシェルを表示する。上の例ではbashが使われている。

■追記
現在のシェルによっては、想定するような(現在のシェルを表示する)結果にならないみたい。
なので、近いうち修正する。ちなみに、「$SHELL」変数はログインシェルっぽい。ちゃんと調べてから書こう…

«  | HOME |  »

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