変数に入ったデータを2次元配列にする方法

投稿者: 投稿日:2018/01/27(Sat) 16:32:19 No.1976

 こんにちは、お世話になります。

 下記のように変数に改行とタブ文字で区切られたデータが入っているとします。

----------
データは、「A  88  2018年1月10日
B  90  2018年1月10日
C  80  2018年1月13日」
----------

 これを2次元配列(いわゆるデータ表の形式)に変換して、1列目や2列目だけのデータを取り出したいと考えています。
 で、今まではファイルに保存してそれを読み込んで取得したり、改行文字で区切って配列にした後、「それぞれ繰り返す」でタブ文字で区切った後、それを1つずつ別の配列に加えて行ったりしていたんですが、もう少し簡単にできないかと思い、質問させていただきました。
 もし、上記のようなことをもう少し簡単にする方法がありましたら、教えていただけると幸いです。

 以上、よろしくお願いいたします。

Re: 変数に入ったデータを2次元配列にする方法

投稿者:ゆうと 投稿日:2018/02/04(Sun) 19:07:34 No.1981

こんにちは ゆうとです。

>  で、今まではファイルに保存してそれを読み込んで取得したり、改行文字で区切って配列にした後、「それぞれ繰り返す」でタブ文字で区切った後、それを1つずつ別の配列に加えて行ったりしていたんですが、もう少し簡単にできないかと思い、質問させていただきました。

どのようなプログラムを作ってみたのでしょうか。
プログラム例などがあると、より良い書き方があるかどうか、答えやすいかと思います。

それでは。

一応ソースを書いてみましたが…

投稿者: 投稿日:2018/02/06(Tue) 20:54:12 No.1984

 こんばんは、お世話になります。
 返信が遅くなり、申し訳ありません。

 とりあえず、今まで書いてきたソースを張り付けてみます。
 なお、想定としては、素材リストやHTTP取得で取得したデータを加工するという感じです。
 ちなみに、さっき気づいたんですが、タブ文字を書き込むと、なぜか全角スペースに置き換えられてしまうようで、先日投稿した表の部分がうまく表示されてなかったようです。
 ということで、今回はコンマで代用してみます。

 まず、1つ目のソースです。

----------
データは、「A,88,2018年1月10日
B,90,2018年1月10日
C,80,2018年1月13日」
配列は、データを[改行]で区切ったもの
番号一覧は、{}
数値一覧は、{}
日付一覧は、{}
配列を要素にそれぞれ繰り返す
もし要素が無でないなら
文字列は、要素を「,」で区切ったもの
文字列(1)を番号一覧へ加える
文字列(2)を数値一覧へ加える
文字列(3)を日付一覧へ加える
もし終わり
繰り返し終わり
番号一覧を表示
数値一覧を表示
日付一覧を表示
----------

 続いて、2つ目のソースです。

----------
データは、「A,88,2018年1月10日
B,90,2018年1月10日
C,80,2018年1月13日」
データを「data.csv」へ保存する
データというデータ表を作る
データへ「data.csv」から読み込む
番号一覧は、データの1列目を一覧で取得したもの
数値一覧は、データの2列目を一覧で取得したもの
日付一覧は、データの3列目を一覧で取得したもの
「data.csv」を削除する
番号一覧を表示
数値一覧を表示
日付一覧を表示
----------

 2つ目のソースのほうが行数的にも少ないですし、簡単に実行できるんですが、ファイルの読み書きが発生するのが難点だと考えており、もう少し簡単に列の一覧を取得できないかと考えた次第です。
 何かアドバイス等をいただけると幸いです。

 以上、よろしくお願いいたします。

Re: 一応ソースを書いてみましたが…

投稿者:アーク 投稿日:2018/02/27(Tue) 22:58:49 No.2001

睦さん、こんばんは。

回答が付かないようなので、またまた横から失礼します。アークです

変数:データに値を代入したのはファイルからではなかったのか?
というのが気になりますがそうでは無いのですね。

2つ目のソースでファイルからではなく変数から読み込めばできそうですが、
ちょっと遣ってみますね。

できました

投稿者:アーク 投稿日:2018/02/27(Tue) 23:31:25 No.2002

睦さん、アークです。

一応、下記ソースで上手く行くようです。
只、プロデルを始めて日が浅いのでこれが正当な遣り方なのかは分かりません。

リストは、「A,88,2018年1月10日
B,90,2018年1月10日
C,80,2018年1月13日」

総数は、リストの行数

データ表を作ってデータとする

行番号を1から総数まで増やしながら繰り返す
  行内容は、リストから[行番号]行目を一行だけ
  行データは、行内容を「,」で区切ったもの
  データに行データを加える
繰り返し終わり

番号は、データの1列目を一覧で取得したもの
数値は、データの2列目を一覧で取得したもの
日付は、データの3列目を一覧で取得したもの

//睦さん方式の行内容の取得
行内容は、{番号(2),数値(2),日付(2)}
行内容を表示する

//列内容の取得
日付を表示する

//別方式での行内容の取得
データの一覧(1)を表示する
データの一覧を表示する

//ピンポイントで取得
データの一覧(2,2)を表示する

以上です。

お名前違っていましたね

投稿者:アーク 投稿日:2018/03/02(Fri) 10:24:51 No.2005

陸さん、おはようございます。

失礼しました。
陸さんのお名前をずっと睦さんと呼んでいました。
私は視力が低い上に乱視が入っているので陸の字が睦に見えてしまいます。
陸さんのサイト名の英文で気が付きました。

ありがとうございます

投稿者: 投稿日:2018/03/02(Fri) 22:55:29 No.2008

 こんばんは、お世話になります。

 教えていただいたサンプル、結構シンプルですね。
 使わせていただきます。
 ありがとうございました。

 今後ともよろしくお願いいたします。

▲ページの先頭へ

- WebForum -