🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

解決済

5回答

5520閲覧

固定長ファイルの列比較

yamatb

総合スコア9

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

0クリップ

投稿2019/11/20 00:48

C#で作成された既存システムの改修を行い、改修前、改修後の結果を比較したいと考えております。

既存システムは固定長ファイルを出力するのですが、
1レコード長が1000byteを超えている行が複数行(~5000行程)存在します。

比較ツールを探し、WinMerge、DF等を使って比較しようとした所、
行差異は検知してくれますが、列差異だけ抽出する事が出来ません。

1000byteの内、20byte程が更新時間の為、新旧システムの比較で必ず差異が発生します。

また、固定長ファイルも7種類あり、全て更新時間が存在するのですが、
それぞれ更新時間の列インデックスは異なります。

特定の列(更新時間)以外に差異がないか検証を行いたいのですが、良い方法、ツールがないでしょうか。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2019/11/20 00:53

よくわかりませんが、比較ツールを作成すれば良いのではないでしょうか?
guest

回答5

0

ベストアンサー

WinMergeでPrediffLineFilterのプラグインでタイムスタンプ部分を処理すればいいのではないですか?

追記
IgnoreColumnsプラグインのほうが楽ですね。
これなら、無視するカラムを指定できますから、除外したいところを指定すれば比較できます。

投稿2019/11/20 01:20

編集2019/11/20 01:28
YAmaGNZ

総合スコア10469

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamatb

2019/11/20 01:57

全て試させて頂いた結果、一番簡単だった為、ベストアンサーにさせて頂きました。 回答頂きました皆様ありがとうございました。
dodox86

2019/11/20 02:11

WinMergeは私も使っていますが、プラグインのことはまったく意識したことがありませんでした。良いことを聞きました。
YAmaGNZ

2019/11/20 02:14

カンマ区切りやタブ区切りであれば、それぞれ対応したプラグインがありますので、そちらを使えば可変長であっても対応できます。
guest

0

Windows環境で出力されているファイルがテキスト形式であるならば、PowerShellも有用な選択肢になると思います。
文字列で、対象のカラム位置の文字列を除去して出力して比較すれば良いでしょう。

例えば以下は、10文字の文字列を先頭から3文字 + (0から数えて)7番目から行末までを比較用の文字列として新たに生成する例です。除去した部分を固定長の「列」と考えれば転用できます。

PowerShell

1PS C:\> $t1 = "0123456789" 2PS C:\> $t2 = $t1.SubString(0, 3) + $t1.SubString(7) 3PS C:\> $t2 4012789

同様なことは、UN*X環境下であればcutコマンドで実現することができます。WSLやCygwin環境下で処理するのも良いと思います。

投稿2019/11/20 01:17

dodox86

総合スコア9254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

多少の手作業が入ってもいいのなら、Excelを使うという方法があります。

  1. Excelで、対象の固定長ファイルを開く
  2. 区切り位置指定ウィザード で、必要な列と不要な列に分ける
    1. (ウィザード)最初に「スペースによって…固定長フィールドのデータ」を選択する
    2. (ウィザード)次に、区切り位置を設定する
    3. (ウィザード)最後に各列のデータ形式を設定する(すべて「文字列」がいいかもしれません)
  3. 不要な列を削除する
  4. 出来上がった結果を、「名前を付けて保存」で「テキスト(タブ区切り)」として保存する

以上の手順を、比較が必要な固定長ファイル一通りに対して行い、出来上がったファイルをWinMergeなどで比較する。

投稿2019/11/20 01:06

alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Excelに新旧データをシート別に取り込む。
それぞれ[データ]→[区切り位置]で分解。
区切るのは全項目を律儀にやらなくても除外したいところだけでよいでしょう。
新シートの全セルの条件付き書式で、旧シートの同じ位置のセルの値が異なっていたら色を付ける。
こんなんで良いのでは。

投稿2019/11/20 01:04

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ExcelのMID関数などを使って列ごとに整理してからExcelで比較するか、
もしくは、サクラエディタなどで矩形選択して更新時間部分だけ削除してから比較じゃだめですか?

投稿2019/11/20 01:04

yuta1717

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問