2010年09月03日

vba:月の何週目かを取得

vbaである日付がその月の何週目かを求める。

何週目 = (Day(対象日) + Weekday(対象日 - Day(対象日) + 1) - 2) \ 7 + 1
(対象日はDate型)
posted by 忘却の達人 at 21:21| Comment(0) | TrackBack(0) | vba | このブログの読者になる | 更新情報をチェックする

2010年08月27日

JavaScript:サイトのhtmlソースを取得する

仕掛けはここの記事と同じ。受け取るデータがDBデータでなくurlエンコードされたhtmlソースというだけ。やってることはこのスクリプト参照。

アドレス :
htmlソース
posted by 忘却の達人 at 06:45| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2010年08月21日

JavaScript:日付オブジェクトにformatメソッドを追加

JavaScriptのDateオブジェクトにVBのFormat関数もどきのメソッドを追加。
非常に手抜きな処理の実装だけど自分的には事足りてるので良しとする。
 
 書式文字
ggg元号(明治、大正、昭和、平成)
gg元号(明、大、昭、平)
g元号(M、T、S、H)
ee和暦年2桁(1桁の場合は前ゼロ付加)
e和暦年
yyyy西暦年4桁
yy西暦年下2桁
mm月2桁(1桁の場合は前ゼロ付加)
m
aaaa曜日(日曜日…土曜日)
aaa曜日(日…土)
dd日2桁(1桁の場合は前ゼロ付加)
d
hh時2桁(1桁の場合は前ゼロ付加)
h
nn分2桁(1桁の場合は前ゼロ付加)
n
ss秒2桁(1桁の場合は前ゼロ付加)
s
zzzミリ秒3桁(3桁未満の場合は前ゼロ付加)
zミリ秒

Date.prototype.format = function (formatStr) {
if (formatStr) {
var s = formatStr;
} else {
var s = "yyyy/mm/dd hh:nn:ss";
}
function getWareki(d, p) {
var wareki = new Array(
{"year": 0, "g": "", "gg": "", "ggg": "西暦"},
{"year": 1867, "g": "M", "gg": "明", "ggg": "明治"},
{"year": 1911, "g": "T", "gg": "大", "ggg": "大正"},
{"year": 1925, "g": "S", "gg": "昭", "ggg": "昭和"},
{"year": 1988, "g": "H", "gg": "平", "ggg": "平成"}
);
if (d < new Date(1868, 8, 8)) {
return wareki[0][p];
} else if (d < new Date(1912, 6, 30)) {
return wareki[1][p];
} else if (d < new Date(1926, 11, 25)) {
return wareki[2][p];
} else if (d < new Date(1989, 0, 8)) {
return wareki[3][p];
} else
return wareki[4][p];

}
function getWeek(d, p) {
return "日月火水木金土".charAt(d.getDay()) + (p === "aaa" ? "" : p === "aaaa" ? "曜日" : p);
}
function fillZero(value, zero) {
return (zero + value).slice(- zero.length);
}
s = s.replace(/ggg/g , getWareki(this, "ggg"));
s = s.replace(/gg/g , getWareki(this, "gg"));
s = s.replace(/g/g , getWareki(this, "g"));
s = s.replace(/ee/g , fillZero(this.getFullYear() - getWareki(this, "year"), "00"));
s = s.replace(/e/g , (this.getFullYear() - getWareki(this, "year")).toString());
s = s.replace(/yyyy/g, this.getFullYear().toString());
s = s.replace(/yy/g , fillZero(this.getYear() % 100, "00"));
s = s.replace(/mm/g , fillZero(this.getMonth() + 1, "00"));
s = s.replace(/m/g , (this.getMonth() + 1).toString());
s = s.replace(/aaaa/g, getWeek(this, "aaaa"));
s = s.replace(/aaa/g , getWeek(this, "aaa"));
s = s.replace(/dd/g , fillZero(this.getDate(), "00"));
s = s.replace(/d/g , this.getDate().toString());
s = s.replace(/hh/g , fillZero(this.getHours(), "00"));
s = s.replace(/h/g , this.getHours().toString());
s = s.replace(/nn/g , fillZero(this.getMinutes(), "00"));
s = s.replace(/n/g , this.getMinutes().toString());
s = s.replace(/ss/g , fillZero(this.getSeconds(), "00"));
s = s.replace(/s/g , this.getSeconds().toString());
s = s.replace(/zzz/g , fillZero(this.getMilliseconds(), "000"));
s = s.replace(/z/g , this.getMilliseconds().toString());
return s;
}

ex.)
new Date("2010/1/2 3:45:6").format("yyyy/mm/dd hh:nn:ss");
     ↓
2010/01/02 03:45:06

posted by 忘却の達人 at 12:38| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

元号の最初の日

元号の初日
 
明治 : 1868/09/08
大正 : 1912/07/30
昭和 : 1926/12/25
平成 : 1989/01/08
 
posted by 忘却の達人 at 09:49| Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

2010年08月03日

Delphi:CSVを扱うクラス

DelphiのTStringsはCSVを行単位でしか読み込めないので、表単位で読み込むCSVクラスを自作した。とりあえずCSVファイルの入出力とソートの最小限の機能のみ。ダウンロードはこちら
posted by 忘却の達人 at 08:14| Comment(0) | TrackBack(0) | Delphi | このブログの読者になる | 更新情報をチェックする

2010年08月02日

JavaScript:リッチテキストエディタで行間を詰める

iframeをdesignmode=onしてリッチテキストエディタを作る場合、改行で<p>タグが挿入されるので行間が広く空いてしまう。行間を開けないようにするには、最初にiframeのbodyエレメントに<div><br></div>(IEは<div>&shy;</div>)を設定しておく。そうすると改行時に<div>タグが挿入されるようになり、行間が詰まるようになる。
但しIEは全選択→削除とすると<p>タグに戻るのが難点。回避方法がありそうな気はするが今のところ不明。
 
作成したリッチテキストエディタはこちら。文字をに装飾できるようにした。スゴい苦労したけど。(苦笑)
posted by 忘却の達人 at 07:15| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2010年06月09日

VBScript:SQL Serverのテーブルをエクスポートする

VBScriptでSQL ServerのテーブルをCSVにエクスポートする。

CreateCSV "サーバー名", "データベース名", "テーブル名", "ファイル名"
WScript.Quit

Function CreateCSV(Byval Server, Byval DBName, Byval TableName, Byval FileName)
Dim fso, tf, cn, rs, Sql, s, fld, tmp
Set cn = CreateObject("ADODB.Connection")
cn.Open "provider=sqloledb;data source=" & Server & ";initial catalog=" & DBName & ";integrated security=sspi" 'Windows認証
Sql = "SELECT * FROM " & TableName
Set rs = cn.Execute(Sql)
If rs.Eof Then
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
Exit Function
End If
Set fso = CreateObject("Scripting.FileSystemObject")
Set tf = fso.CreateTextFile(FileName, True)
s = ""
For Each fld in rs.Fields
s = s & ",""" & Replace(fld.Name, """", """""") & """"
Next
tf.WriteLine Mid(s, 2)
Do Until rs.Eof
s = ""
For Each fld in rs.Fields
If IsNull(fld.Value) Then
s = s & ","
ElseIf fld.Type = 202 or fld.Type = 203 Then
'改行コードがあるとちゃんと読み込めないことがある(多い)ので適当なコードに変換する
tmp = Replace(fld.Value, Chr(13) & Chr(10), Chr(9) & Chr(8))
tmp = Replace(tmp, Chr(13), Chr(9) & Chr(8))
tmp = Replace(tmp, Chr(10), Chr(9) & Chr(8))
s = s & ",""" & Replace(tmp, """", """""") & """"
ElseIf fld.Type = 135 Then
s = s & "," & FormatDT(fld.Value)
Else
s = s & "," & CStr(fld.Value)
End If
Next
tf.WriteLine Mid(s, 2)
rs.MoveNext
Loop
tf.Close
Set tf = Nothing
Set fso = Nothing
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Function

Function FormatDT(Byval DT)
FormatDT = Year(DT) & "/" & Right("0" & Month(DT), 2) & "/" & Right("0" & Day(DT), 2) & " " _
& Hour(DT) & ":" & Right("0" & Minute(DT), 2) & ":" & Right("0" & Second(DT), 2)
End Function
posted by 忘却の達人 at 21:32| Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

2010年06月07日

JavaScript:クロスドメインで動的にデータを取得

JavaScriptでクロスドメインで動的にデータを取得する方法。
scriptタグを動的に作って、そのsrc属性でcgiを指定する。
例えば郵便番号をパラメータで受け取って検索した住所をJavaScriptのコードで返すcgi作る。

http://どこかのサイト/郵便番号検索.php?郵便番号=1000001&コールバック関数=getAddr

<cgiの処理>
パラメータの郵便番号からデータベースを検索し住所を取得する。
取得した住所を受け取るコールバック関数を実行するJavaScriptを出力する。
//言葉にするとややこしいが出力するコードは単純
getAddr(["検索した住所"]); //コールバック関数に結果を渡す(複数返ることがあるので配列にする)

このcgiをsrc属性とするscriptタグを動的に作り、コールバック関数でcgiが生成した住所のパラメータを受け取る。

<サンプル>
緑里庵のサイトに郵便番号データベースから住所を取得するphpを設置し、それをJavaScriptで取得する。)

郵便番号を入力して検索ボタンを押してください。
郵便番号
住所

↑のソース(仕組みはsaadd.js参照)
<script type="text/javascript" src="http://www.ryokurian.jp/atelier/saadd/saadd.js" charset="utf-8"></script>
郵便番号を入力して検索ボタンを押してください。
郵便番号 <input type="text" size=8 length=8 id="postCD" />
<input type="button" onclick="_ryokurian_searchAddr(document.getElementById('postCD').value, 'addr');"
value="検索" class="input-submit" />
住所 <input type="text" id="addr" size=50 />
posted by 忘却の達人 at 06:31| Comment(0) | TrackBack(0) | JavaScript | このブログの読者になる | 更新情報をチェックする

2010年06月03日

Access:DAOでデータを取得できるクエリがADOで取得できない

Accessでデータベースウィンドウから開くとデータを表示するクエリが、VBAでADOで開くとデータを取得できないことがあった。試しにDAOで開くとちゃんと取得できる。

クエリの条件に 項目 like "A*" なんてのがあったためだった。ADOのワイルドカードが"%"って事は百も承知だけど、データベースウィンドウからクエリを開く分には正常だったので、クエリに問題があるとはみじんも疑わず、気がつくのに時間がかかった。
posted by 忘却の達人 at 20:55| Comment(1) | TrackBack(0) | Access | このブログの読者になる | 更新情報をチェックする

2010年05月30日

Aptana:文字コードの初期値の設定

Aptana Studio 2.04
文字コードの初期値をUTF-8に設定するには、
1.Windowsメニュー → Prefrencesから設定画面を開く。
2.画面左のツリーから General → Conten Types を選択。
3.画面右のツリーから Text を展開し、HTML(CSS/JavaScript) Source File を選択する。
4.画面下の Default encoding に"UTF-8"を入力し、右横の Update ボタンを押す。
posted by 忘却の達人 at 03:08| Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。