アプリ版:「スタンプのみでお礼する」機能のリリースについて

CSVファイルが2つあります。
この内容が同じかどうかをチェックしたいんです。

しかしエクセルで開くとデータが256を超えているため、途中でちょん切れちゃって比較できません。

メモ帳で開けばちょん切れませんが、比較する方法が思い当たりません。

どうすればよいでしょうか?

A 回答 (11件中1~10件)

#10


改行も1文字として数えるので、ファイルの最後は改行せずに試してみてください^-^

If EOF(1) And EOF(2) Then
このIf文は、
ファイル1及びファイル2から読み込む文字がなくなったときに真になるけれど、最後の文字の一致/不一致まで言及していないのです。^-^;


If EOF(1) And EOF(2) And MyChar1 = MyChar2 Then
これだと、
ファイル1及びファイル2から読み込む文字がなくなり、かつ、最後の文字も一致しているときに真になります。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2004/11/24 17:48

#8


最後の1文字が違うとき、同じと判定されていました^-^;

訂正です。
If EOF(1) And EOF(2) Then

If EOF(1) And EOF(2) And MyChar1 = MyChar2 Then

この回答への補足

何度もありがとうございます。
少数のデータで試しましたが、以下のコードで最後の1文字違いも判別するようですが、If EOF(1) And EOF(2) ThenでなくIf EOF(1) And EOF(2) And MyChar1 = MyChar2 Thenの意味はなんでしょう?

Sub CSVデータ比較()
Dim MyChar1 As String
Dim MyChar2 As String
Dim FName1 As Variant
Dim FName2 As Variant

Res = MsgBox("データを比較する2つのCSVファイルを選びます。 " & vbCr & _
"" & vbCr & _
"続行しますか?", vbYesNo + vbQuestion, "確認")

If Res = vbNo Then
MsgBox "中止します。 ", , "中止"
Exit Sub
End If

FName1 = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv")

If FName1 = False Then
MsgBox "中止します。", , "中止"
Exit Sub
Else
End If

MsgBox FName1 & "を選択しました。 " & vbCr & _
"比較対象するファイルを選択してください。 ", , "対象選択"

FName2 = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv")

If FName2 = False Then
MsgBox "中止します。", , "中止"
Exit Sub
Else

MsgBox FName1 & "と " & vbCr & _
FName2 & "の" & vbCr & _
"データを比較します。", vbInformation, "比較開始"

Open FName1 For Input As #1
Open FName2 For Input As #2

Do Until EOF(1) Or EOF(2)
MyChar1 = Input(1, #1)
MyChar2 = Input(1, #2)

If MyChar1 <> MyChar2 Then Exit Do
n = n + 1
Loop

If EOF(1) And EOF(2) Then
MsgBox "データ" & n & "個(カンマを含む)は完全一致です。", , "終了"
Else
MsgBox "データが異なりました。 " & vbCr & _
"カンマを含み、" & n & "個目で最初の不一致を確認しました。 ", , "終了"
End If

Close #1
Close #2

End If
End Sub

補足日時:2004/11/21 21:00
    • good
    • 0

> とりあえずは同じかどうかだけでいいのです。


> FilsSystemObject の ReadAll メソッドというものを存じませんので・・・。

ReadAll メソッド
http://www.microsoft.com/japan/msdn/library/ja/s …

こちらが参考になると思います。
ただ、↑にも書いてありますが、csvファイルのサイズが大きければ、使えませんが (^^ゞ
    • good
    • 0

vbaで


txtデータが同じかどうか調べたいということならば、こんな感じになります^-^?

Option Explicit

Public Sub Aaa()

Dim MyChar1 As String
Dim MyChar2 As String

Open "c:\temp\1.csv" For Input As #1
Open "c:\temp\2.csv" For Input As #2

Do Until EOF(1) Or EOF(2)
MyChar1 = Input(1, #1)
MyChar2 = Input(1, #2)

If MyChar1 <> MyChar2 Then Exit Do
Loop

If EOF(1) And EOF(2) Then
Debug.Print "OK"
Else
Debug.Print "違うよ^-^"
End If

Close #1
Close #2

End Sub
    • good
    • 0
この回答へのお礼

ご教示をもとに下記のように作りました。
ちゃんと作動するようですが、穴がないか、またはアドバイスがありましたら教えていただけたら幸いです。

Sub CSVデータ比較()
Dim MyChar1 As String
Dim MyChar2 As String
Dim FName1 As Variant
Dim FName2 As Variant

Res = MsgBox("比較用する2つのファイルを選びます。 " & vbCr & _
"続行しますか?", vbYesNo + vbQuestion, "確認")

If Res = vbNo Then
MsgBox "中止します。 ", , "中止"
Exit Sub
End If

Dim FName1 As Variant
FName1 = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv")

If FName1 = False Then
MsgBox "中止します。", , "中止"
Exit Sub
Else
End If

MsgBox FName1 & "を選択しました。 " & vbCr & _
"比較対象するファイルを選択してください。 ", , "対象選択"

Dim FName2 As Variant
FName2 = Application.GetOpenFilename(FileFilter:="CSVファイル (*.csv), *.csv")

If FName2 = False Then
MsgBox "中止します。", , "中止"
Exit Sub
Else

MsgBox FName1 & "と " & vbCr & _
FName2 & "の" & vbCr & _
"データを比較します。", vbInformation, "比較開始"

Open FName1 For Input As #1
Open FName2 For Input As #2


Do Until EOF(1) Or EOF(2)
MyChar1 = Input(1, #1)
MyChar2 = Input(1, #2)

n = n + 1

If MyChar1 <> MyChar2 Then Exit Do
Loop

If EOF(1) And EOF(2) Then
MsgBox "データ" & n & "個(カンマを含む)は同一でした。", , "終了"
Else
MsgBox "データ異なりました。", , "終了"
End If

Close #1
Close #2

End If
End Sub

お礼日時:2004/11/21 17:55

(1)普通ビジネスでファイルが同じかどうか問題にするのはキー(例えば社員コードのようなもの)で、AとBファイルの同一の2レコードについてキー以外の項目を比較します。


このキーに当たるものがAとBファイルにありますか。
(2)無ければ、Aファイルの1番目のレコードとBファイルの1番目のレコード(以下2番と2番、以下繰り返し)で比較せねばなりませんが、それで意味がありますか。Bファイルに1レコード挿入されただけでも他のレコードが全く同じでも挿入レコード以後はすべて不一致になります。そう言う事態は考えられないのでしょうか。
(1)については、A,Bファイルをキー順にソートして
マッチングのアルゴリズムで処理するのが易しく、処理時間が早いと思います。オフラインバッチ処理の定番です。
普通は(2)は既製ソフト(ファイルコンペア)を見つけるのが良いのではないでしょうか。
>、いずれはVBAで処理しようと
プログラムはマッチングのアルゴリズムなら比較的簡単ですが、他の方法では、人によってはそこまで速く達するが、近くにアドバイザなどいないと、一般には難しいものですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。

> Bファイルに1レコード挿入されただけでも他のレコードが全く同じでも挿入レコード以後はすべて不一致になります。そう言う事態は考えられないのでしょうか。

今回はこれは想定外でしたが、今後はそういうこともありますね。そのときのために既成ソフトがあるということですね。勉強になりました。

お礼日時:2004/11/21 21:40

> この内容が同じかどうかをチェックしたいんです。



どのレベルで比較するのでしょうか?

同じかどうかだけでいいのなら、FilsSystemObject の ReadAll メソッドで双方を読み込み、単純に
比較するとか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
とりあえずは同じかどうかだけでいいのです。
FilsSystemObject の ReadAll メソッドというものを存じませんので・・・。

お礼日時:2004/11/21 17:59

すいません、読んだらそのとおりでした



FCは内容です
    • good
    • 0
この回答へのお礼

何度もありがとうございます。

FCは内容?やっぱりわかりません。
わたし、そもそも「バッチ」がどういうものかも知らないので、今回はVBAでやってみました。
ごめんなさい。

お礼日時:2004/11/21 17:58

1.txtはたとえばです。

拡張子に注意してください

「1.txtを1.bat」とは名前を変えればいいです。

1はご自由に~
    • good
    • 0

テキストで


「FC ファイル名.csv ファイル名2.csv > kekka.txt」
で保存。(1.txtとする)

1.txtを1.batに変更。
3ファイルを同じ場所においてbatをダブルクリック。

kekka.txtに違う場所が表示されます。
あとこれは 完全一致でないと使えません(・・;)

この回答への補足

ありがとうございます。

>「FC ファイル名.csv ファイル名2.csv > kekka.txt」
で保存。(1.txtとする)

意味がよくわからないのですが、「」内が拡張子を含んだファイル名ですか?(1.txtとする)ってどういう意味でしょうか?

> 1.txtを1.batに変更。

拡張子を変えるということですか?

補足日時:2004/11/20 15:54
    • good
    • 0

ファイルを比較するための下記のようなソフトが有ります。



CSVなら、拡張子をTXTに変更すれば問題なく動作するはずです。

参考URL:http://www.vector.co.jp/soft/win95/util/se110502 …

この回答への補足

ありがとうございます。
たた、いずれはVBAで処理しようと思っていますので、できれば比較ソフト以外でやりたいのです。

補足日時:2004/11/20 15:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!