人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

VBSの質問です
a.html
******************
<table>
<tr>
<td>1</td>
<td>2</td>
<td>hoge1</td>
<td>hoge1</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>hoge1</td>
<td>hoge1</td>
</tr>
<tr>
<td>3</td>
<td>1</td>
<td>hoge3</td>
<td>hoge1</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>hoge2</td>
<td>hoge1</td>
</tr>
<tr>
<td>3</td>
<td>2</td>
<td>hoge3</td>
<td>hoge1</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>hoge2</td>
<td>hoge1</td>
</tr>
</table>
******************
というファイルがあるのですが、
これを
b.html
******************
<table>
<tr>
<td>1</td>
<td>1</td>
<td>hoge1</td>
<td>hoge1</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>hoge1</td>
<td>hoge1</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>hoge2</td>
<td>hoge1</td>
</tr>
<tr>
<td>2</td>
<td>3</td>
<td>hoge2</td>
<td>hoge1</td>
</tr>
<tr>
<td>3</td>
<td>1</td>
<td>hoge3</td>
<td>hoge1</td>
</tr>
<tr>
<td>3</td>
<td>2</td>
<td>hoge3</td>
<td>hoge1</td>
</tr>
</table>
******************
に変換するスクリプトを教えて下さい
一番左の列を第一優先 左から二番目の列を第二優先でソートをお願いします

●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きゃづみぃ
●150ポイント ベストアンサー
Dim objFile  ' 対象ファイル
Dim objFile2 ' 出力ファイル
Dim objFSO ' ファイルシステムオブジェクト
Dim k
Dim tb()
Dim tb2()

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("a.html")
k=0
strText = objFile.ReadLine
strText = objFile.ReadLine
Do Until objFile.AtEndOfLine = True
strText1 = objFile.ReadLine
strText2 = objFile.ReadLine
strText3 = objFile.ReadLine
strText4 = objFile.ReadLine
strText = objFile.ReadLine
strText = objFile.ReadLine
k=k+1
redim Preserve tb(k)
redim Preserve tb2(k)
tb2(k)=strText
a=instr(strText1,"<td>")
b=instr(strText1,"</td>")
c= mid(strText1,a+4,b-5)
tb(k)= c * 10000
a=instr(strText2,"<td>")
b=instr(strText2,"</td>")
c= mid(strText2,a+4,b-5)
tb(k)= tb(k) + c
tb2(k) = "<tr>" & vbcrlf & strText1 & vbcrlf & strText2 & vbcrlf
tb2(k) = tb2(k) & strText3 & vbcrlf & strText4 & vbcrlf & "</tr>"
Loop
objFile.Close

for a=1 to k
for b=a to k
if tb(a)>tb(b) then
c=tb(a)
tb(a)=tb(b)
tb(b)=c
d=tb2(a)
tb2(a)=tb2(b)
tb2(b)=d
end if
next
next

Set objFile2 = objFSO.CreateTextFile("b.html")
objFile2.WriteLine("<table>")
for a=1 to k
objFile2.WriteLine ( tb2(a) )
next
objFile2.WriteLine("</table>")

objFile2.Close


2 ● cx20
●150ポイント

http://q.hatena.ne.jp/1362320474 と殆ど同じサンプルとなりますが、
ADO + Jet/ACE Database Engine + ISAM ドライバ(テキストドライバ)を用いることで、HTML のテーブルを SQL のテーブルとして操作できるようになります。

' File : SortTable.vbs
' Usage : CScript SortTable.vbs //Nologo > b.html
Option Explicit

Dim cn
Set cn = CreateObject("ADODB.Connection")
' Jet データベースエンジンを使用した場合の接続文字列
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\a.html;Extended Properties=""HTML Import;HDR=No;"""
' ACE データベースエンジンを使用した場合の接続文字列
'cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=.\a.html;Extended Properties=""HTML Import;HDR=No;"""

Dim rs
' 列1、列2の順にソートする
Set rs = cn.Execute("SELECT * FROM [Table] ORDER BY F1, F2")

Dim strRow
Dim strData
Dim fld

WScript.Echo "<table>"
While Not rs.BOF And Not rs.EOF
 strRow = "<tr>" & vbCrLf
 For Each fld In rs.Fields
 strData = "<td>" & fld.Value & "</td>" & vbCrLf
 strRow = strRow & strData
 Next
 strRow = strRow & "</tr>"
 WScript.Echo strRow
 rs.MoveNext
Wend
WScript.Echo "</table>"

上記の ADO の接続文字列は、以下のような構成を表しています。

<ADO 概要>
[アプリケーション]
   |
  [ADO] … ADODB.Connection
   |
  [OLE DB]
   |
[OLE DB Provider] … Microsoft.Jet.OLEDB.4.0 もしくは
   | Microsoft.ACE.OLEDB.12.0
 [ISAM ドライバ] … Extended Properties="HTML Import;HDR=No;"
   |
 [HTML ファイル] … Data Source=.\a.html

「HDR=No」を指定した場合は、F1, F2, ... のように自動的に列名が付与されます。
ソートする場合は、この列名を使用して、

SELECT * FROM [Table] ORDER BY F1, F2

と、することで、ソートすることが可能です。

F1F2F3F4
12hoge1hoge1
11hoge1hoge1
31hoge3hoge1
22hoge2hoge1
32hoge3hoge1
23hoge2hoge1

以下は、ソートした結果になります。

F1F2F3F4
11hoge1hoge1
12hoge1hoge1
22hoge2hoge1
23hoge2hoge1
31hoge3hoge1
32hoge3hoge1

実行方法。以下は、対象ディレクトリを「C:\home\edu\hatena\takanii\136248047」とした場合のコマンド例です。

1. エクスプローラにて「C:\Windows\SysWOW64」フォルダを開きます。

2. 「cmd.exe」を実行します。
  「コマンドプロンプト」が起動します。

3. 「コマンドプロンプト」にてスクリプトのあるディレクトリに移動します。
例)
C:\Windows\SySWOW64> CD C:\home\edu\hatena\takanii\136248047 [Enter]

4. スクリプトを引数無しで実行しエラーが出ないことを確認します。
例)
C:\home\edu\hatena\takanii\136248047> CScript SortTable.vbs [Enter]
→ エラーなく、画面に結果が表示されれば、成功です。

5. 再度スクリプトを引数付きで実行し、b.html に結果をリダイレクトさせます。
例)
C:\home\edu\hatena\takanii\136248047> CScript SortTable.vbs //Nologo > b.html [Enter]

Jet データベースエンジンでも動作する想定ですが、うまくいかない場合は、
ACE データベースエンジンを試してみてください。
ACE データベースエンジンは以下よりダウンロード可能となっています。

■ Download: Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント - Microsoft Download Center - Download Details
http://www.microsoft.com/ja-jp/download/details.aspx?id=13255

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ