VBSの質問です

a.html
**************
<table>
<tr><td>1</td><td>hoge1</td></tr>
<tr><td>3</td><td>hoge3</td></tr>
<tr><td>2</td><td>hoge2</td></tr>
<tr><td>1</td><td>hoge1</td></tr>
<tr><td>2</td><td>hoge2</td></tr>
</table>
**************

b.html
**************
<table>
<tr><td>1</td><td>hoge1</td></tr>
<tr><td>1</td><td>hoge1</td></tr>
<tr><td>2</td><td>hoge2</td></tr>
<tr><td>2</td><td>hoge2</td></tr>
<tr><td>3</td><td>hoge3</td></tr>
</table>
**************
にソートしてくれるプログラムを教えて下さい

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/03/03 23:21:14
  • 終了:2013/03/10 23:25:03

回答(2件)

id:cx20 No.1

cx20回答回数604ベストアンサー獲得回数1072013/03/04 00:08:32

ポイント150pt

VBScript にて ADO というライブラリを使用したサンプルです。
HTML のテーブルを SQL のテーブルとして扱える為、ORDER BY によりソートが可能となっています。

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

Dim cn
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\a.html;Extended Properties=""HTML Import;HDR=No;"""

Dim rs
Set rs = cn.Execute("SELECT F1, F2 FROM [Table] ORDER BY F1")
Dim n
n = 0
WScript.Echo "<table>"
While Not rs.BOF And Not rs.EOF
    WScript.Echo "<tr><td>" & rs("F1") & "</td><td>" & rs("F2") & "</td></tr>"
    rs.MoveNext
Wend
WScript.Echo "</table>"

使用方法

CScript SortTable.vbs //Nologo > b.html

他6件のコメントを見る
id:cx20

Jet データベースエンジンがうまく機能していないようですね。。。
Jet の上位版である、ACE データベースエンジンでは如何でしょうか。コンポーネントは以下 URL よりダウンロード可能です。

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

ソースコードの変更箇所は「Microsoft.Jet.OLEDB.4.0」→「Microsoft.ACE.OLEDB.12.0」になります。

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\a\Desktop\結合\a.html;Extended Properties=""HTML Import;HDR=No;"""

cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\a\Desktop\結合\a.html;Extended Properties=""HTML Import;HDR=No;"""
2013/03/05 20:55:14
id:cx20

Microsoft JET Database Engine: エラーを特定できません

と表示されるケースですが、環境変数の TMP または TEMP に存在しないフォルダが定義してる場合に、表示されるケースがあるようです。

■ [PRB] Jet 使用時に "ディスクまたはネットワークのエラー" または "特定できないエラー" が発生する
http://support.microsoft.com/kb/251254/ja

念のため、コマンドプロンプトで、以下のコマンドを実行し、表示されたパスが存在するか、ご確認頂けないでしょうか。
(自分の PC 環境で、TMP / TEMP 環境変数を存在しないパスに変更し、同じエラーが出ることを確認しました。)

C:\> ECHO %TMP% [Enter]
C:\> ECHO %TEMP% [Enter]
2013/03/05 21:34:17
id:taknt No.2

きゃづみぃ回答回数13538ベストアンサー獲得回数11982013/03/04 00:35:57

ポイント150pt
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
Do Until objFile.AtEndOfLine = True
	strText = objFile.ReadLine
	if instr(strText,"<tr>") > 0 then
		k=k+1
		redim Preserve tb(k)
		redim Preserve tb2(k)
		tb2(k)=strText
		a=instr(strText,"<td>")
		b=instr(strText,"</td>")
		tb(k)=mid(strText,a+4,b-9)
	end if
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

他1件のコメントを見る
id:taknt
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
Do Until objFile.AtEndOfLine = True
	strText = objFile.ReadLine
	if instr(strText,"<tr>") > 0 then
		k=k+1
		redim Preserve tb(k)
		redim Preserve tb2(k)
		tb2(k)=strText
		a=instr(strText,"</td><td>")
		b=instr(a+1,strText,"</td>")
		tb(k)=mid(strText,a+9,b-19)
	end if
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
2013/03/04 15:22:55
id:taknt
		a=instr(strText,"<td>")
		b=instr(strText,"</td>")
		tb(k)=mid(strText,a+4,b-9)
の三行を

		a=instr(strText,"</td><td>")
		b=instr(a+1,strText,"</td>")
		tb(k)=mid(strText,a+9,b-19)
に変更しました。
2013/03/04 15:23:43

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません