欠落しているタグの追加No.03097
hachiline さん 02/04/03 01:44
 
ハチラインと申します。初めて投稿します。

非常に初歩的なことだとは思うのですが、過去ログやFAQをみても見つかりませんで
した。お手数ですが、ご教授お願いします。

アクセスからXML形式でエキスポートしたテキスト文書を秀丸マクロでいっきに処理
したいと考えているのですが、データの無い項目がどうやらエキスポートされないた
め、レコードによって項目の数がばらばらなのです。これを何とか欠落したタグを挿
入することで完全体にしたいです。

XML のタグがたとえば完全形は下記のようだとして

<表>
<項目1>内容1</項目1>
<項目2>内容2</項目2>
<項目3>内容3</項目3>
<項目4>内容4</項目4>
<項目5>内容5</項目5>
<項目6>内容6</項目6>
</表>

実際には、

<表>
<項目1>内容1</項目1>
<項目4>内容4</項目4>
<項目5>内容5</項目5>
</表>

こんな感じになっていたりします。足りない項目になんとか中身が空のタグを挿入し
て完全形にしたいのですが、欠落している文字列(タグ)を探すことができません。
前後の項目を探しても、それ自体が欠落している可能性もあるので困っています。な
んとか、欠落しているタグを一ずつ埋めて完全対にしてくマクロはかけないでしょう
か?

お手数ですが、よろしくお願いします。



[ ]
RE:03097 欠落しているタグの追加No.03100
ENCODINGSHIFTJIS さん 02/04/03 12:23
 
>アクセスからXML形式でエキスポートしたテキスト文書を秀丸マクロでいっきに処理
>したいと考えているのですが、データの無い項目がどうやらエキスポートされない
>ため、レコードによって項目の数がばらばらなのです。これを何とか欠落したタグ
>を挿入することで完全体にしたいです。
わかりませんが、エキスポートのオプションに何かありませんか。

[ ]
RE:03097 欠落しているタグの追加No.03101
ながさわ さん 02/04/03 13:09
 
長澤です。

accessがどんなxmlを吐くか知らないのですが、以下のような感じ?

$fieldNames[0] = "field1";
$fieldNames[1] = "field2";
$fieldNames[2] = "field3";
#fieldNum = 3;
$topOfRecord = "row";

gofiletop;
searchdown "^<" + $topOfRecord + ">", regular;
while(result){
  down;
  #i = 0;
  while(#i < #fieldNum){
    $line = gettext(x, y, width, y);
    if(strstr($line, "<" + $fieldNames[#i] + ">") == -1){
      insert "<" + $fieldNames[#i] + "></" + $fieldNames[#i] + ">\n";
      up;
    }
    #i = #i + 1;
    down;
  }
  up;
  searchdown "^<" + $topOfRecord + ">", regular;
}


(途中のinsert文は折り返してしまいそう)
ただ、<field></field>と出されるフィールドと、それ自体が出されないフィールド
ではDB的に意味が違うと思いますが? 見方によってはDBの設計ミスかも?

[ ]
RE:03101 欠落しているタグの追加No.03102
ながさわ さん 02/04/03 13:14
 
長澤です。

書き忘れましたが、
>$fieldNames[0] = "field1";
>$fieldNames[1] = "field2";
>$fieldNames[2] = "field3";

の部分は、吐き出されるフィールドの順番に全部書いてください。配列の添え字は0
オリジン。

>#fieldNum = 3;

フィールド数を指定してください。つまり、最後のフィールドの添え字+1になりま
す。

>$topOfRecord = "row";

レコードを表すタグを書いてください。

[ ]
RE:03097 欠落しているタグの追加No.03106
安久津 さん 02/04/04 17:45
 
こんにちは安久津といいます。
>アクセスからXML形式でエキスポートしたテキスト文書を秀丸マクロでいっきに処理
>したいと考えているのですが、データの無い項目がどうやらエキスポートされないた
>め、レコードによって項目の数がばらばらなのです。これを何とか欠落したタグを挿
>入することで完全体にしたいです。
# 私は、Access のテーブル( またクエリ )を XML データにしたことはありません。
「値の無いフィールドは、要素を生成しない」とかのオプションありませんか?

たとえ Access のエクスポートが上手くいかなくても、
次のようにすれば、XML データが生成できると思います。
# 手元に Access が無いので動くかどうか分かりません。
# 適当に修正してください。(^^ )>>

sub toXML()
    dim rst as DAO.Recordset
    dim fld as DAO.Field
    dim fv as Variant
    dim fout As Integer
    fout = FreeFile
' 保存する場所を指定して。
    Open "C:\My Documents\table.xml" For Output As #fout
' テーブルやクエリーを指定して。
    set rst = CurrentDb.OpenRecordset("テーブルの名前")

    Print #fout, "<root>"
    do until rst.EOF
        Print #fout, "<record>"
        for each fld in rst.Fields
            if fld.Type <> dbLongBinary then
'               fv = fld.Value
                fv = IIf(IsNull(fld.Value),"", fld.Value)
                if fld.Type = dbMemo and fv <> "" then
                    fv = Replace(fv, "&", "&amp;")
                    fv = Replace(fv, "<", "&lt;")
                    fv = Replace(fv, ">", "&gt;")
                    fv = Replace(fv, Chr(34), "&quot;")
                    fv = Replace(fv, Chr(39), "&apos;")
                end if
            else
                fv = "NOT PRINTABLE"
            end if
            Print #fout, "<" & fld.Name & ">" & fv & "</" & fld.Name & ">"
        next
        Print #fout, "</record>"
        rst.MoveNext
    loop
    rst.Close
    Print #fout, "</root>"
    Close #fout
end sub

[ ]
RE:03097 欠落しているタグの追加No.03109
hachiline さん 02/04/05 00:36
 
ながさわ様
阿久津様、その他の方コメントありがとうございました。
自分ひとりでやっていたら途方にくれるところでした。

アクセスXPからXMLでエクスポートするときに、すべてのタグを残してエクスポート
する方法は、おそらく無いのではないかと思います。少なくとも、エクスポート時に
指定できる複数のオプションにはありませんでした。とりあえず今は、なんとアクセ
スの各項目の規定値に■というデータに現れることのないデータを入れることでタグ
を全部だしてしのいでいます。

ながさわ様の秀丸マクロですが、ちょっと時間がかかると思いますが、これをもとに
秀丸マクロをもうすこし研究して動きを把握して試してみようと思います。

阿久津様のプログラムは・・・これは、アクセスのモジュールにすればよいのでしょ
うか・・・?そうだとするとアクセスXPをインストールしていないPCでも利用できる
ので、こちらはかなり経済的でありがたいです。でも今度はせめてモジュールの利用
の仕方だけでも勉強してからまたレポートします。

皆様どうもありがとうございました。

[ ]