• 締切済み

C言語の並び替え

プログラミング初心者です。 1 1 8227 49 1204 1 1 2 1 2 1 0 1 1 8203 48 48207 9 1 2 2 3 1 0 1 1 10367 56 48206 8 2 2 1 2 1 0 1 1 14206 74 1212 4 1 2 1 2 1 0 1 1 1204 1 20201 95 1 2 3 4 1 0 1 1 22210 107 30201 136 1 2 2 3 2 0 1 1 26103 119 11103 60 1 2 2 3 1 0 という横に87個、縦に30000個のデータファイルがあります。 データの並び替えをしたいのですが まず1行目、4列目(1, 4)のデータを先頭に持ってきて 次に4列目とi列目を比較して同じ(iは1行目i列目という意味)(i=14, 22, 34, 38, 42)であれば2番目に持ってきます。 次にi列目が決まった時jは以下のように決まるとします。またjはj列目にあるデータとします。 i=14のとき j=16, 18, 20 i=22のとき j=24, 26, 28, 30, 32 i=34のとき j=36 i=38のとき j=40 i=42のとき j=44 を順番にならべてください。 例)4列目が5のとき、   5 5(i=22) 3(j=24) 2(j=26) 0(j=28) 0(j=30) 3(j=32) としたいのです。 次にj列目とk列目(k=14, 22, 34, 38, 42)を比べ同じであれば、iを選んだときにjを並べたようにしたいのです。(少しわかりにくい?) 例) 5 5 3 2 0 0 3(j=32) 3(k=14) (16列目)(18列目)(20列目) というように。    最後にn列目と6列目を比較して同じであれば終了。次は2行目、4列目… それを30000行目まで。 というプログラミングをつくりたいです。 最終的に、txt形式にしたいのですが、なにぶん知識は本でしかなく、どうすればいいかわかりません。 fgets、strtok、atoiを使って配列してから・・・・みたいにするのですか?説明に不足があるかもしれません。すいません。

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.5

処理対象は、「第4回トリップデータ」として、補足要求します。  http://www.mlit.go.jp/seisakutokatsu/jyunryuudou/doc/format2005.pdf そうでない場合は、以降無視して下さい。 ++++++++++++++++++++++++++++++++++++++++++++++ トップの、1 1 8227 49 1204 1 1 2 1 2 1 0 は、 1   利用交通機関(1:航空2:鉄道3:幹線旅客船4:幹線バス5:乗用車等) 1   代表交通機関 8227  出発地純流動市町村コード(筑西市:茨城に飛行場はないはずだが??) 49   出発地207生活圏コード( 83 のはずだが??) 1204  目的地純流動市町村コード(旭川市) 1   目的地207生活圏コード( 11 のはずだが??) 1   旅行目的 2   宿泊有無 1   泊 2   日 1   日目 0   海外旅行フラグ となります。 質問文冒頭で示されたデータについて、 ・「並び替え」の質問で最も重要と思われる『利用経路』以降を、なぜ省略したか。 ・上の??部分は、質問投稿用?に加工したものか。 ・手元のデータは、「横に87個」とあるが、間違いはないか。 以上、3点について、補足願います。 ++++++++++++++++++++++++++++++++++++++++++++++ >最終的に、txt形式にしたいのですが、なにぶん知識は本でしかなく、どうすればいいかわかりません。  内容的には、必要な項目を抜き出し、ファイルに出力するだけだから、「本」だけの知識で十分可能だと思います。

回答No.4

まず「入力データファイルの仕様書」を作りましょう。 数値が何を意味しているのか、取り得る値の範囲はどこからどこまでか、複数の項目の関連性はどうなっているか、など。 それが出来たら「出力したいtxtファイルの仕様書」を作りましょう。 入力データがこうなってたらこう出力するとか、この値はこういう文字に変換するとか、など。 「仕様」を明確にしてしまえば「仕様通りにプログラムすれば良いだけ」です。 「何をどうプログラムして良いのか判らない」「質問しようと思っても上手く説明できない」のは「自身が仕様を理解してないから」です。 >というプログラミングをつくりたいです。 「プログラミング」とは「プログラムする」と言う意味の動詞です。 「というプログラミングをつくりたいです」と言う表現は間違いなので「というプログラムをつくりたいです」または「というプログラミングをしたいです」と言う表現にしましょう。 >fgets、strtok、atoiを使って配列してから 仕様を理解してないうちにプログラムしようとしても無意味です。 今は、そういう事を考える段階ではありません。もっと手前の段階で躓いているのですから。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

14-21列、22-33列、34-37列、38-41列、42-45列 の各ブロックであるデータを表しているということかな 奇数列が飛ばしてある意味も知りたい とりあえず87個のデータフォーマットの意味がわかれば理解しやすいと思います。 4番目:出発地 6番目:到着地 14番目:空港?

yahootrt
質問者

補足

13列目から航空の出発空港(都道府県) 14列目  航空の出発空港(207生活圏)       ・       ・       ・       ・ という風に都道府県、生活圏、都道府県、生活圏・・・・・ で並んでます。 全国幹線旅客純流動調査の個票データを使います。 旅行目的、代表交通機関、年齢、宿泊日数など87項目の個人属性が書いてあります

回答No.2

No.1氏への返答で追加されて言いますが、やっぱりわかりません。 理由は単純で、 「質問に提示されているデータ」から、質問者さんが提示している「結果」が導き出せないからです。 まず、「結果が導き出せるデータ」を例としてあげてください。 そのデータの項目は「それぞれ何を意味しているのか」記載してください。 そのうえでも行いたいことを説明してください。

yahootrt
質問者

補足

遅くなって申し訳ありません。 4列目 出発地 6列目 目的地 14列目 航空の出発空港 16列目 航空の乗換空港 18列目 航空の乗換空港 20列目 航空の到着空港 22列目 鉄道の出発駅 24、26、28、30列目 鉄道の乗換駅 32列目 鉄道の到着駅 34列目 幹線バスの出発 36列目 幹線バスの到着 38列目 フェリーの出発 40列目 フェリーの到着 42列目 乗用車の出発 44列目 乗用車の到着 4列目と6列目にはどこからどこへ行った。というデータしかありません。 14列目から44列目までは何にのったのかというデータしかありません。 なので何に乗ってどういう順番でどこからどこへいったのかを知りたいのです。14列目から44列目までを並び替えると出発地点と目的地に一致するはずなんですが。説明が下手で申し訳ないです

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

えぇと.... 「少しわかりにくい?」と書かれていますが, 正直に言います. 「少し」どころか「最初から全くわかりません」 そもそも最初の「1行目、4列目(1, 4)のデータを先頭に持ってきて」はどのような理由から出てきたんでしょうか? そして, そのあとの「4列目とi列目を比較して同じ(iは1行目i列目という意味)(i=14, 22, 34, 38, 42)であれば2番目に持ってきます。」の 14 とか 22 とかいう数値はどこを見ればわかるんでしょうか? さらに「次にj列目とk列目(k=14, 22, 34, 38, 42)を比べ同じであれば、iを選んだときにjを並べたようにしたい」の i と j と k はどのような関係にあるのでしょうか? 最後に「n列目と6列目を比較して同じであれば終了。次は2行目、4列目…」の「…」の完全な順序を示してください (「2行目」が来るのも謎だけど).

yahootrt
質問者

補足

すいません。説明不足で。混乱したと思います。 4列目は出発地点です。6列目は到着地点です。 (出発地点)------(?)-------→(到着地点) この間に使った交通機関の情報がわかりません。 i列目にある情報は各交通機関の搭乗空港、出発地点です。 iが5個あるのは空港、鉄道、バス、船、乗用車です。 例えば出発地点Aから到着地点Bに行った時 鉄道、航空と経由した場合、どのようなルートを通ったのか? A(49地点) 出発駅(49地点) 乗継駅(56地点) 乗継駅(0地点(0地点の場合欠損データとして処理)) 乗継(0) 乗継(0) 到着駅(78) 搭乗空港(78) 乗継(0) 到着空港(178) B(178) 49 56 78 178 ってのがわかるようにしたいのですが。 1行に1人が移動したときのデータがはいってます。 地点の情報は1~207まであります。

関連するQ&A