始めまして、今週からVBを初めましたyukiです。
<TABLE>タグ内の<TR>(1行)単位でデータをVBで取得し、テキストファイルに保存する方法がわかりません。
どなたかご教授の程お願いいたします。
私も同様のことをご教授願いたいと思っております。
便乗してしまい申し訳ございませんが、宜しくお願いします。
<実現したいこと>
HTML(およびCSS)のタグの構造ををVBのオブジェクト構造に変換したい。
<目的>
HTMLを学習するソフトを開発中です。
HTMLの記述が正しいかを自動的に判定し、
間違っている場合は、その箇所を指摘するシステムを開発。
こう言うののマル投げはだめ、わからない個所を
質問しましょう。
>yuki
下記みたいにすればいいんじゃない?
Text1.textにHTMLのソースを表示して・・・
dim i as long
dim start as long
dim length as long
dim data as string
data=""
i=1
do while(i+5<=len(Text1.text))
if mid(Text1.text,i,4)="<TR>" then
i=i+3
start=i+1
length=0
elseif mid(Text1.text,i5)="</TR>" then
data=data & mid(Text1.text,start,length) & vbcrlf
i=i+4
else
length=length+1
endif
i=i+1
loop
でdataをファイルに保存。
ねろ様
申し訳ございませんでした。
ただ、正直なとこる、丸投げするつもりはありませんでした。
yuki様の質問の内容がわかれば、私の課題も解決すると思ったのです。
皆様に、丸投げという印象を与えたのは確かです。
今後気をつけます。
My様
今回のソースでは、<TR>および</TR>を検査し、この間に存在する文字列をdataに代入するのですね。
これを応用し、
はじめに"/"のないタグを見つけると(今回の場合は<TR>)、次に同じタグの"/"付き(今回の場合は</TR>)を見つけ、その間の文字列を変数に代入する。というようにすると<TR>以外のタグも処理できると思います。
ありがとうございました。
実は、HTMLのエディターみたいな機能をもったクラスは、ないのかなあと調べていました。
でも、My様の方法で、十分対応できると思います
ありがとうございました。
>こう言うののマル投げはだめ、わからない個所を質問しましょう。
と書いたのは<table>の内容を抜き出すにしても、行や列の結合は
どうするのかなどHTMLの知識がどの位あり、どこまでやるかが判らないからです。
特にHTMLの解析となる、かなり多岐にわたり、とても簡単には説明できません。
構文チェックで私がやっている大まかな手順は、
1、特殊記号のチェック。
『<<』や『>>』が連続していないか、
『"』がタグの外で使用されていないかなど。
2、全角カタカナのチェック。
全角カタカナが使用されていないか。
3、タグが存在するか否かのチェック。
『<table>』等のタグが実際に存在するか否かをチェックします。
タグの辞書を作っておいてその比較となります。
4、タグのネスト構造の解析。
この部分が最も難しい部分です。
開始タグで段落としを行い、終了タグで戻すと言う方法でタグの
タグのネスト構造を解析します。
<html lang="ja">
<head>
</head>
<body>
<p>
</p>
</body>
</html>
こんな具合にします。
たとえば<p>の終了タグが抜けていた場合
<html lang="ja">
<head>
</head>
<body>
<p>
</body>
</html>
こんなことになり、<body>と</body>の段落としの位置が
異なり、おかしいと言うことになります。
5、関連タグのチェック
たとえば<tr>があった場合<table>タグと</table>に挟まれているかなどです。
6、タグの属性のチェック
たとえば『<table border=4 width=250 align=center>』
というタグがあった場合、テーブルタグにborderを設定できるか
値の4は正しいか等です。
7、CSSのチェック
A、インラインスタイルのチェック
B、クラスによる設定のチェック
8、JavaScriptのチェック
簡易チェックのみ
細かなチェックは色々有りますがこんな流れです。
ねろ様がおっしゃるとおり、HTMLの解析は、複雑で困っていました。
そこで、HTMLの知識不足を補ってくれるような、
自動的に解析してくれるクラスなどがあればなあと思っていました。
でも、この考え方は、甘いと反省しております。
ねろ様がご教授くださったことを参考に、
自分なりに勉強してまいります。
その中で、具体的に質問させていただきたいと思います。
ご指導ありがとうございました。
ツイート | ![]() |