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

new
X100 Y200 Z300
X111 Z333

old
X100 Y200 Z300
X111 Y200 Z300
を同じものとして比較したいのです
フィールドそのものはレコード2は違いますが
new の レコード2のYは200なので
同じものです

正規表現などを使ってフィールド内のX Y Zをばらばらに読ませることは出来ました
splitでそれを行うと
X[1000] Y[500] Z[3000]などの差もうまれますし
それぞれがどのフィールドにあったかを記憶させておく方法などが解りません

教えてください

A 回答 (2件)

ちょっと気になったんですが、



> X[1000] Y[500] Z[3000]などの差もうまれますし

なぜそれが問題になりますか?単純に、

$0~/(new)|(old)/{
getline
split($0,dat1)
getline
split($0,dat2)
}

とすれば、データは以下の順に連想配列に格納されるので、dat1[1]とdat2[1]を比較すれば済みますよね。

dat1[0]=X100
dat1[1]=Y200
dat1[2]=Z300

dat2[0]=X111
dat2[1]=Y200
dat2[2]=Z300

この回答への補足

ありがとうございます
これでいけそうな気はするのですが、
パースエラーが出てうまく動きません

補足日時:2012/02/24 14:34
    • good
    • 0

> フィールド内のX Y Zをばらばらに読ませることは出来ました



それができたのなら、
連想配列を使って if ( X != "" ) { a["X"]=X ;}とかして(変数XにはXの値が入っているとして)、
・項目があったら最新情報に更新
・項目が無かったら前の値を保持

if ( a["X"] == b["X"] && a["Y"] == b["Y"] && a["Z"] == b["Z"] ) {
同じ
} else {
違う
}
みたいな判定するとか
print "X" a["X"] "Y" a["Y"] "Z" a["Z"]
等と省略されている分を全部補ったファイルを作ってdiffで比較するとか。
    • good
    • 0

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