C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: コマンド(fc)によるファイル比較につきまして


(過去ログ 149 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■87081 / inTopicNo.1)  コマンド(fc)によるファイル比較につきまして
  
□投稿者/ ak (10回)-(2018/04/11(Wed) 08:44:05)

分類:[VB6 以前] 

重ね、お世話になります。

コマンド(fc)によるファイル比較につきまして、ご質問致します。

下記のWebページを参考例(例えば以下のようなファイルがあったとします。)では、同じ結果となり問題はありませんでした。
fc【コマンド】とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
http://wa3.i-3-i.info/word11919.html

しかし、Webページにもよると思いますがそのWebページを範囲選択⇒ コピーText1Box、Text2Boxに貼り付けます。
比較(1.txt)(2.txt)の行目と比較結果(3.txt)の最終行が一致しません。
1.txt、2.txtファイルの最終行は566行です。比較結果の最終行は589行です。

操作手順
1.Webページを範囲選択(Ctrl+A) ⇒ コピー(Ctrl+C) ⇒ Text1Box、Text2Boxに貼り付けます。

2.Text1Boxの最終行目の先頭に[1]を追加します。

   最終行目: Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights Reserved
       ↓
   最終行目: 1Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights Reserved

3.Command1⇒クリック

  ファイル 1.txt と2.txt比較結果の3.txtファイルが開きます。

   比較結果の内容(3.txt)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
ファイル 1.txt と 2.TXT を比較しています
***** 1.txt
588: Linuxコマンド辞典
589: 1Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights Reserved
***** 2.TXT
588: Linuxコマンド辞典
589: Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights Reserved
*****
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' コマンド(fc)によるファイル比較
'
' 準備・・・ [Text1.Text] [Text2.Text] [Command1_Click]
'
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()

'Text1box ⇒ 1.txtファイル作成
intFileNo = FreeFile
Open App.Path & "\1.txt" For Binary Access Write As #intFileNo
Put #intFileNo, , Text1.Text
Close #intFileNo

'Text2box ⇒ 2.txtファイル作成
Open App.Path & "\2.txt" For Binary Access Write As #intFileNo
Put #intFileNo, , Text2.Text
Close #intFileNo

'1.txtファイル と 2.txtファイル を比較し比較結果を 3.txtファイル作成
Shell "cmd.exe /c fc /n 1.txt 2.txt > " & Chr(&H22) & App.Path & "\3.txt", vbHide
Sleep 1000
'比較結果の3.txtファイルが開きます。
Call Shell("notepad.exe " & App.Path & "\3.txt", vbNormalFocus)
End Sub
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

質問
  1.txt、2.txtファイルの最終行(566行)と比較結果の最終行(589行)に
  何故、違いがおきるのか、その理由が知りたいのですが、
  ご指導のほどよろしくお願いいたします。


引用返信 編集キー/
■87082 / inTopicNo.2)  Re[1]: コマンド(fc)によるファイル比較につきまして
□投稿者/ ぽぴ王子 (54回)-(2018/04/11(Wed) 09:19:59)
ぽぴ王子 さんの Web サイト
No87081 (ak さん) に返信

正直申し上げて、何をお聞きになりたいのか、要領を得ない感じです。
私が読み解いたのは

1. 同じ内容で最終行(これが566行ということですよね?)に変更を加えて違う内容にした
2. その内容を保存し fc.exe を起動するようなプログラムを作成した。
3. fc.exe の結果では566行目ではなく589行目と出ているが、それはなぜなのか?

ということだと推測しました。
すなわち、プログラムは関係なく fc.exe の出力結果がなぜ自分の認識している行と違う
行番号で出力されているのか?という話ですよね。

例えば、質問者さんの認識している最終行が実は566行目ではなく589行目なのかもしれ
ませんし(エディタによって段落行と表示行で行番号を分けて表示するものもあります)
比較対象となったWebページがわからないとなんとも言えないですね。

引用返信 編集キー/
■87084 / inTopicNo.3)  Re[2]: コマンド(fc)によるファイル比較につきまして
□投稿者/ ak (12回)-(2018/04/11(Wed) 10:26:45)
2018/04/11(Wed) 10:53:16 編集(投稿者)

ぽぴ王子 さん

返答して下さいまして、ありがとうがざいました。

<1. 同じ内容で最終行(これが566行ということですよね?)に変更を加えて違う内容にした
vb6によるコマンド(fc)によるファイル比較プログラムを記載しています。プログラムには
fc.exeでファイル 1.txt と2.txtを比較し比較結果を3.txtとして作成しているだけですので変更は加えていません。

<2. その内容を保存し fc.exe を起動するようなプログラムを作成した。
vb6の記載プログラムは以下の内容です。
Webページを範囲選択(Ctrl+A) ⇒ コピー(Ctrl+C) ⇒ Text1Box、Text2Boxに貼り付けます。
Command1⇒クリックしますとText1、Text2の同じデータが1.txt 、2.txt作成しています。
fc.exeで1.txt 、2.txtを比較し、fc.exeの結果を3.txt作成しています。

<3. fc.exe の結果では566行目ではなく589行目と出ているが、それはなぜなのか?
はい、そうです。566行目ではなく同じ566行目にならないのか?
Webページの参考例(1 2 3 4 5 6 7 8 9 10)と(1 2a 3 4b 5 6 7 8 9c 10)
をText1Box(1 2 3 4 5 6 7 8 9 10)Text2Box(1 2a 3 4b 5 6 7 8 9c 10)
でテストしますと参考例と同じ結果となり問題ありませんでした。
質問は参考Webページを範囲選択してText1Box、Text2Boxに貼り付けText1Boxの最終行だけ変更した場合
(3.txt)の最終行が(Text1Box=Text2Box)と同じにならない理由が知りたいのです。

<ということだと推測しました。
<すなわち、プログラムは関係なく fc.exe の出力結果がなぜ自分の認識している行と違う
<行番号で出力されているのか?という話ですよね。
済みません、説明不足ありました。fc.exeの中身によるものですのでプログラムとは関係ありません。

<例えば、質問者さんの認識している最終行が実は566行目ではなく589行目なのかもしれ
<ませんし(エディタによって段落行と表示行で行番号を分けて表示するものもあります)
<比較対象となったWebページがわからないとなんとも言えないですね。

行番号表示はTeraPadテキストエディターで確認しています。
TeraPadで行番号を表示する方法
http://www.ofuton.info/web/terapad01.html


直接、コマンドプロントでも同じ結果になりました。
C:\>fc /n 1.txt 2.txt

引用返信 編集キー/
■87087 / inTopicNo.4)  Re[1]: コマンド(fc)によるファイル比較につきまして
□投稿者/ furu (163回)-(2018/04/11(Wed) 11:05:23)
No87081 (ak さん) に返信
ぽぴ王子さんとおなじく、よくわからないのですが
行数カウントの違いなので、改行文字の問題だと思います。

改行文字がどこかで変わったか
改行文字の認識が違ったか

問題が生じたWEBページと
ブラウザは何かを書いて頂けると
何かわかるかもしれません。
引用返信 編集キー/
■87088 / inTopicNo.5)  Re[2]: コマンド(fc)によるファイル比較につきまして
□投稿者/ ak (13回)-(2018/04/11(Wed) 12:09:48)
furu さん

返答して下さいまして、ありがとうがざいました。

<ぽぴ王子さんとおなじく、よくわからないのですが
済みません。そこで、
vb6のプログラムとは別に、直接コマンドプロントから実行して確認しました。

http://wa3.i-3-i.info/word11919.html
Webページを範囲選択(Ctrl+A) ⇒ コピー(Ctrl+C)して 
1.txt と 2.txtに貼り付けてファイル作成します。
この時点では1.txt と 2.txtは全く同じ文字列です。
1.txtの最終行目の1ヶ箇所だけ変更します。

[fc]プロントを実行します。

C:\>fc /n 1.txt 2.txt 

比較(1.txt)(2.txt)の行目と比較結果(3.txt)の最終行が一致しません。

<行数カウントの違いなので、改行文字の問題だと思います。
1.txtの最終行目だけ変更していますので最終行前まで
(1.txt)と(2.txt)の文字列は全く同じです。最終行の1ヶ箇所だけ変更しているだけで
何故、比較(1.txt)(2.txt)の行目と比較結果(3.txt)の最終行が一致しないのかが分りません。


<問題が生じたWEBページと
<ブラウザは何かを書いて頂けると
<何かわかるかもしれません。
fc【コマンド】について調べていました。そのWEBページについて記載しています。
Webページを範囲選択(Ctrl+A) ⇒ コピー(Ctrl+C)
 http://wa3.i-3-i.info/word11919.html
特に容量の小さいWEBページ以外は殆ど一致されませんでした。
[fc.exe]の使い方に問題があるのかとも思い、 一致されなかった場合の理由が
分ればと思います。

引用返信 編集キー/
■87089 / inTopicNo.6)  Re[3]: コマンド(fc)によるファイル比較につきまして
□投稿者/ ぽぴ王子 (55回)-(2018/04/11(Wed) 12:45:36)
ぽぴ王子 さんの Web サイト
No87084 (ak さん) に返信

申し訳ないのですが、引用する場合は「<」ではなく「>」を使用していただきたいです。
この掲示板の仕様として、行頭に「>」が入っていると引用として色を変えて表示されるようになっているので、どこが引用されたのかわかりやすくなります。

> vb6によるコマンド(fc)によるファイル比較プログラムを記載しています。プログラムには
> fc.exeでファイル 1.txt と2.txtを比較し比較結果を3.txtとして作成しているだけですので変更は加えていません。

…となると、最初の質問にあった

> 2.Text1Boxの最終行目の先頭に[1]を追加します。
> 
>    最終行目: Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights Reserved
>        ↓
>    最終行目: 1Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights Reserved

は、どういった意図で書かれているのでしょうか。「最終行目の先頭に[1]を追加」したのであれば「同じデータ」
にはならないような気がしますが。
ご自身でも

> 質問は参考Webページを範囲選択してText1Box、Text2Boxに貼り付けText1Boxの最終行だけ変更した場合
> (3.txt)の最終行が(Text1Box=Text2Box)と同じにならない理由が知りたいのです。

と書かれていますよね。「最終行だけ変更した」と。
それはそれとして。

> はい、そうです。566行目ではなく同じ566行目にならないのか?

とりあえずTeraPadをダウンロードして、少し長めの文章を編集して試してみました。
TeraPadはデフォルト(折返し設定をしない)では、行番号は表示行ではなく論理行(改行までを1行と認識する)
で表示しているようです。
fc.exe の場合、何文字目なのかはわかりませんが、長い行の場合は途中で折り返し処理を行っているようです。

例として以下の2ファイルを作成して fc.exe で比較してみました。

---------- 1.txt
1
2
3
4
じゅげむ じゅげむ ごこうのすりきれ かいじゃりすいぎょの すいぎょうまつ うんらいまつ ふうらいまつ くうねるところにすむところ やぶらこうじのぶらこうじ ぱいぽ ぱいぽ ぱいぽのしゅーりんがん しゅーりんがんのぐーりんだい ぐーりんだいのぽんぽこぴーの ぽんぽこなーの ちょうきゅうめいのちょうすけ
6
7
8
9
10
---------- 1.txt

---------- 2.txt
1
2
3
4
5じゅげむ じゅげむ ごこうのすりきれ かいじゃりすいぎょの すいぎょうまつ うんらいまつ ふうらいまつ くうねるところにすむところ やぶらこうじのぶらこうじ ぱいぽ ぱいぽ ぱいぽのしゅーりんがん しゅーりんがんのぐーりんだい ぐーりんだいのぽんぽこぴーの ぽんぽこなーの ちょうきゅうめいのちょうすけ
6
7
8
9
10
---------- 2.txt

結果はこんな感じです。

C:\>fc /n 1.txt 2.txt
ファイル 1.txt と 2.TXT を比較しています
***** 1.txt
    4:  4
    5:  じゅげむ じゅげむ ごこうのすりきれ かいじゃりすいぎょの すいぎょうまつ うんらいまつ ふうらいまつ くうねるところにすむと
    6:  アろ やぶらこうじのぶらこうじ ぱいぽ ぱいぽ ぱいぽのしゅーりんがん しゅーりんがんのぐーりんだい ぐーりんだ いのぽんぽこぴー
    7:  の ぽんぽこなーの ちょうきゅうめいのちょうすけ
    8:  6
***** 2.TXT
    4:  4
    5:  5じゅげむ じゅげむ ごこうのすりきれ かいじゃりすいぎょの すいぎょうまつ うんらいまつ ふうらいまつ くうね るところにすむと
    6:  ころ やぶらこうじのぶらこうじ ぱいぽ ぱいぽ ぱいぽのしゅーりんがん しゅーりんがんのぐーりんだい ぐーりんだいのぽんぽこぴ
    7:  [の ぽんぽこなーの ちょうきゅうめいのちょうすけ
    8:  6
*****

TeraPadでは「じゅげむ じゅげむ」の行は5行目、その次の6は6行目として表示されているかと思いますが fc.exe では
「くうねるところにすむと」までで行を分割しているため、6の行は8行目として認識されています。

これが行番号が食い違う原因かと思われます。

引用返信 編集キー/
■87090 / inTopicNo.7)  Re[3]: コマンド(fc)によるファイル比較につきまして
□投稿者/ Hongliang (631回)-(2018/04/11(Wed) 12:47:38)
128バイト辺りで境界があって、それを超える行はまずその境界までを1行、超える分は次の行、という風に扱ってるようです。
なので改行文字数よりも多くの行番号が表示されるケースがあると。

ちなみに文字単位じゃなくてバイト単位なので、CP932などのマルチバイト文字セットだと変な文字が出てきたりします。
例えば、上記境界に“」”が置かれていたとき、次の行先頭に”v”が出てきたりします。
“」”は0x81 0x76の2バイトで、0x81と0x76の間で分割された結果、0x76が”v”として出てくるという感じ。
引用返信 編集キー/
■87093 / inTopicNo.8)  Re[3]: コマンド(fc)によるファイル比較につきまして
□投稿者/ furu (164回)-(2018/04/11(Wed) 13:17:38)
No87088 (ak さん) に返信
>  http://wa3.i-3-i.info/word11919.html

最初に「下記のWebページを参考例では、同じ結果となり問題はありませんでした。」と
書かれていたので、このページでは問題無いと勘違いしてしまった。

ShiftJISで128バイトを超える行が二十数行あるので
Hongliangさん書かれているように128バイトで
改行と考えると、結果が合いますね。
引用返信 編集キー/
■87095 / inTopicNo.9)  Re[4]: コマンド(fc)によるファイル比較につきまして
□投稿者/ ak (14回)-(2018/04/11(Wed) 14:48:22)
ぽぴ王子 さん

再三、渡りご返答して頂きまして、ありがとうございました。

> 申し訳ないのですが、引用する場合は「<」ではなく「>」を使用していただきたいです。
> この掲示板の仕様として、行頭に「>」が入っていると引用として色を変えて表示されるようになっているので、どこが引用されたのか> わかりやすくなります。
はい分りました。大変申し訳ありませんでした。

>は、どういった意図で書かれているのでしょうか。「最終行目の先頭に[1]を追加」したのであれば「同じデータ」
>にはならないような気がしますが。

済みません。説明が不十分でした。

>例として以下の2ファイルを作成して fc.exe で比較してみました。
>これが行番号が食い違う原因かと思われます。
はい、分りました。

説明が不十分でありましたので、vb6プログラムと関係ない直接コマンドプロントで実行して確かめました。

http://wa3.i-3-i.info/word11919.html
1.Webページを範囲選択(Ctrl+A) ⇒ コピー(Ctrl+C)して 
2.[1.txt] と [2.txt]に貼り付けてファイル作成します。
  この時点では[1.txt] と [2.txt]は全く同じ文字列です。
3.[1.txt]の最終行目の1ヶ箇所だけ変更します。
  [1.txt] と [2.txt]の最終行目の文字列は違いますが、最終行番号は同じです。
   
     行 [1.txt]
     1: Text1ア\示 ] [ 簡易表示 ] [ シンプル表示 ]
           ・
           ・
    567:1Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights Reserved

    '
    '
     行 [2.txt]
     1: Text1ア\示 ] [ 簡易表示 ] [ シンプル表示 ]
           ・
           ・
    567:Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights Reserved

     ※[1.txt] と [2.txt]の最終行目の文字列は違いますが、最終行番号は同じです。

4.[fc]プロントを実行します。

  C:\>fc /n 1.txt 2.txt 
 
''''''''''''''''''''''''''''''''''''''''''''
' プロントの実行結果
'
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\pana>fc /n 1.txt 2.txt
ファイル 1.txt と 2.TXT を比較しています
***** 1.txt
589: Linuxコマンド辞典
590: 1Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights
Reserved
***** 2.TXT
589: Linuxコマンド辞典
590: Copyright(C)2013-2018 ITの万屋 PCS Piyopiyo Create ServiceAll Rights
Reserved
*****
'
''''''''''''''''''''''''''''''''''''''''''''
'
比較[1.txt][2.txt]の行目と比較結果[3.txt]の最終行が一致しません。

Webページの問題では無く[fc.exe]の使い方に問題があるのかとも思います?
一致されなかった場合の理由が分ればと思います。



引用返信 編集キー/
■87096 / inTopicNo.10)  Re[5]: コマンド(fc)によるファイル比較につきまして
□投稿者/ ak (15回)-(2018/04/11(Wed) 14:51:39)
Hongliang さん

ご返答して下さいまして、ありがとうがざいました。

> 128バイト辺りで境界があって、それを超える行はまずその境界までを1行、超える分は次の行、という風に扱ってるようです。
はい、分りました。128バイトを超える行は次の行、に扱ってるようですか。
> なので改行文字数よりも多くの行番号が表示されるケースがあると。
はい、分りました。それが一致しなかった理由でしたか。
> ちなみに文字単位じゃなくてバイト単位なので、CP932などのマルチバイト文字セットだと変な文字が出てきたりします。
> 例えば、上記境界に“」”が置かれていたとき、次の行先頭に”v”が出てきたりします。
> “」”は0x81 0x76の2バイトで、0x81と0x76の間で分割された結果、0x76が”v”として出てくるという感じ。
はい、分りました。[fc.exe]の仕様なのですね。


[fc.exe]の仕様についての説明webページがあってもよいと思うのですが。
知りたかった理由が分りました。
本当にありがとうございました。
引用返信 編集キー/
■87097 / inTopicNo.11)  Re[6]: コマンド(fc)によるファイル比較につきまして
□投稿者/ ak (16回)-(2018/04/11(Wed) 14:55:48)
furu さん

再三、渡りご返答して頂きまして、ありがとうございました。

>ShiftJISで128バイトを超える行が二十数行あるので
はい、分りました。128バイトが二十数行を引きますと合います。
>Hongliangさん書かれているように128バイトで
>改行と考えると、結果が合いますね。
はい、分りました。[fc.exe]の仕様なのですね。
[fc.exe]の仕様についての説明webページがあってもよいと思うのですが。
知りたかった理由が分りました。
本当にありがとうございました。

理由が分りましたので数時間後に解決とさせてもらいます。
引用返信 編集キー/
■87098 / inTopicNo.12)  Re[7]: コマンド(fc)によるファイル比較につきまして
□投稿者/ ak (17回)-(2018/04/11(Wed) 15:43:09)
ぽぴ王子 さん furu さん Hongliang さん

ご返答して頂きまして、ありがとうございました。

128バイトが境界で超えるますと次の行として扱って
いるのが一致しないことの理由が分りました。
理由が分りましたので解決と致しました。

お世話になりました。ご指導ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -