nagajisの日不定記。
本日のアクセス数:0|昨日のアクセス数:0
ad
Excelのデータの並べ替えで困っている。識者のご教示を頂ければ幸い。
こんな感じのデータ列があるとする。頭に2桁~4桁の数字、続いてハイフンがつく、というようなデータ。数字の桁は揃っていない。
これをExcel上で昇順に並べ替えるとこうなる。おそらく頭の一文字から順に見ていって、それで並べ替えていると思う。半角ハイフンの文字コード<半角英数字の文字コードなので「15-」が「155(-)」より前にくると。
ここで5行目の「15-」を「15-A」、6行目の「155-」を「155-B」と書き換え、同じように並べ替えをやると、
こうなってしまう。
こうなってしまう原理がさっぱりわからない。本来は「15-A」が先にくるはずで、実際phpでこのような配列を作りsortすると15-A、155-Bの順になる。DOSのsortでも同じだ。
「A」や「B」は実は関係なく、ハイフンのあとに何か入っているのとそうでないのとで並び替え順が変わってしまうようだ。しかもどうやらExcelだけではないらしく、Windowsのとあるプログラム上で同じデータ列を並び替えるとExcelと同じ並びになるのだった。
要はExcelやそのプログラムの「並べ替え」をそっくりそのままphpで再現したいのだが、どういう理屈でこう並び替えられるのかわからず困っている。
すくなくとも「ふりがなで並び替え」は関係がない。オプションを外しても同様だ。
元のデータをゼロフィルして4桁に揃えてしまえば万事解決するのだが、そしてそうしたいのは山々なのだが、それをやると2万数千件分を削除→再登録せねばらなず、それはそれで原理的には可能のはずなのだが未だ試したことがなく、仮に失敗したら命が死ぬことになる。100日分の作業量だからなあ。数千件の削除と登録はやったことあるんだが、あれは被害軽微なやつだったから踏み切れた。今回のはそうもいかない。
生きるか死ぬかを賭けて元データを修正するか、わけわかめなデータ整列を再現するか、入れ替わりが生じることを大前提として現状ママイキで行くか。悩ましい。この悩む時間が無駄だとはわかっている。他のことに手が付かない。思い切ってやってみて、失敗したら死ぬ気でリカバリするよう肚を括ってGOするほうがなんぼかましだろうと思う。思うが、なかなか踏ん切れぬ。
似たような逡巡で時間を浪費することが多い。探索に行くか行かないかとか、聞き込みするか否かとか。行ってイキアタリバッタリズムでなんとかしてきただろうが>nagajis。そのほうが面白かったりするだろうが。
わかりそうでわからないことほど意識の最前列を占拠しよる。片付けたいのは山々で早く片付けるためにそうやって見える所に置いてあるのだろうけれども、それに注意を払うことだけでも随分な時間を浪費している気がする。煉瓦刻印とか。煉瓦裏面の筋が出来る理由とか。刻印のない煉瓦の出処とか。ああ、無駄。
突然失礼します。<br>ハイフンの件ちょっと気になったので調べてみましたが、どうもハイフン(と引用符)のみ文字として認識せずに並び替えするようです。<br>http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9891.html<br>なぜこうなるのかは「仕様です」というのが回答のようです…。<br>(マイクロソフトコミュニティでも同じような回答が)<br>同じ順に並び替えるにはハイフン除去して並び替えるぐらいしか思いつかないですね…
参考までにコミュニティの方のURLです。<br>http://answers.microsoft.com/ja-jp/office/forum/office_2010-excel/%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E4%B8%A6/d438a8fb-f5a9-4bb1-82be-f7449b9d7d9a?msgId=4b8a1d16-09f3-4e7f-94ef-d510ec1b7b46
あああ! そういうご教示を待っておりました! 有難うございます有難うございます。。。<br>ハイフンを削除……。なるほど、それは案外有効かも知れませぬ。このデータ列がデータベースのプライマリキーに相当するものなので、実データをいじることはできんのですが、s/-//前と後の値を連想配列で関連付けといたら。うん、それでやってみまする。