■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#20997-0不一致行のチェックプログラムmomo2002-05-31(金) 11:30
     #20998-0RE#20997:不一致行のチェックプログラム魔界の仮面弁士2002-05-31(金) 11:42
     #21000-0RE#20997:不一致行のチェックプログラム魔界医師2002-05-31(金) 15:38
#20997-0
不一致行のチェックプログラム
二つのテキストファイルの比較のプログラムを作っています。
そのとき、空白、タブを考慮した場合の考えと
考慮しない場合の両方を考えたとき。

ファイル1:1234 567
ファイル2:1234	567
では空白&タブを考慮すれば"≠"
空白&タブを考慮しなければ"="
という意味になるのですがそういうプログラムを
作りたいのですがどうしたら良いでしょうか?

ファイル1:abcd
ファイル2:abdc
の場合は空白&タブを考慮しても、しなくても"≠"にしたいです。
文字を一つ一つ比較していけば良いのでしょうか?
しかし、書き方が分からないです。
プログラムはじめて間も無いので、どうかけば良いか分からないので
諸先輩方教えてください。
#20998-0
RE#20997:不一致行のチェックプログラム
> 二つのテキストファイルの比較のプログラムを作っています。
行単位での読み込みには、
  1. TextStreamオブジェクトのReadLineメソッド
  2. StreamオブジェクトのReadText メソッド
  3. Line Input # ステートメント
のいずれかを使います。

> そのとき、空白、タブを考慮した場合の考えと
> 考慮しない場合の両方を考えたとき。
Replace関数を使って、双方の空白やタブを消す(=長さゼロの文字列に置換する)事で、
比較が容易になると思います。
#21000-0
RE#20997:不一致行のチェックプログラム
カルテ1:症状
・複数の空白や TAB コードは等価として扱う、文字列比較の方法が判らない。

カルテ2:診断
・近頃、FC という DOS プロンプト上の命令の話題が出ている。 この命令は、ファイルの一致を比較
(コンペア)することが出来るので、バッチファイル化して、VB から Shell で呼んでも良いだろう。

・もうひとつの考え方は、まず TAB は全部スペースに置き換えた後、2つ連続するスペースを、1つ
のスペースに置き換える事である。 長さ0の文字列にしてしまうと、「A B」と「AB」が一致と扱わ
れるので、これを不一致としたいならば、2つ連続スペースが無くなるまでループした方が良いだろう。

カルテ3:処方
・内容が、教育実習のように感じられるが、技術者として生きていく事を考えるならば、どんなに判ら
なくとも、判るまで考え、調べ、試した方が良いのだが、いかがだろうか。 当院でも2つのサンプル
を用意してみるが、採用しない方が良いのかも知れない。

【案1】
<c:\aaa.bat>
FC /W c:\aaa.txt c:\bbb.txt > c:\aaa.tmp
rename c:\aaa.tmp aaa.chk

<Form1.frm>
Private Sub Command1_Click()
    Const cBAT As String = "c:\aaa.bat"
    Const cCHK As String = "c:\aaa.chk"
    Dim lw As Long
    Dim cw As String

    If Dir(cCHK) <> "" Then
        Kill cCHK
    End If

    Shell cBAT

    While lw = 0
        DoEvents
        If Dir(cCHK) <> "" Then
            lw = FileLen(cCHK)
        End If
    Wend

    Open cCHK For Input As #1
    Line Input #1, cw
    Line Input #1, cw
    Close #1

    If Left(cw, 8) = "FC: 相違点は" Then
        MsgBox "OK"
    Else
        MsgBox "BAD"
    End If
End Sub

【案2】
Private Sub Command1_Click()
    Dim cw(1) As String
    Dim i As Integer

    Open "c:\aaa.txt" For Input As #1
    Line Input #1, cw(0)
    Close #1

    Open "c:\bbb.txt" For Input As #1
    Line Input #1, cw(1)
    Close #1

    For i = 0 To 1
        cw(i) = Replace(cw(i), vbTab, " ")

        iw = 1
        While iw
            cw(i) = Replace(cw(i), "  ", " ")
            iw = InStr(cw(i), "  ")
        Wend
    Next i

    If cw(0) = cw(1) Then
        MsgBox "OK"
    Else
        MsgBox "BAD"
    End If
End Sub
このページと関連する記事:
#47099-0CSVファイルの比較方法2001-09-21(金) 20:40
#28614-0続・ファイル内の文字列を置換したい。2002-05-10(金) 14:57
#17276-0ファイルの結合2001-08-15(水) 13:04
#28862-0お願い致します。m(__)m2002-05-23(木) 09:40
#198-3DHCPの判定2002-05-16(木) 05:31
#11058-0テキストファイルを読み込む2000-09-01(金) 17:12
#23949-0テキストファイルを印刷2001-10-23(火) 16:07
#106-2テキストファイルの読み込み2003-07-29(火) 10:07
#6986-0ディレクトリ検索方法2000-03-29(水) 17:33
#40456-0ピクチャーの画像(色識別等)比較方法2001-03-18(日) 20:59
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)