質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1872閲覧

csvデータの整形について

Ai_no_Osa

総合スコア9

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/07/25 05:50

編集2017/07/25 07:23

###前提・実現したいこと

今現在PHPを使いCSVデータの整形を行なっているのですが、上手にいきません。
PHPにCSVのデータを読み込むことはできたのですが、指定した箇所の削除ができません。
指定したデータを削除し出力したいです。

###発生している問題・エラーメッセージ

こちらが使用しているCSVデータです。
12345,,,,xx市,,,,2011/1/1,男,"222,412","1,956","1,905","2,053","1,938","2,032","2,028","2,037","2,100","2,115","2,189","2,110","2,072","2,128","2,185","2,187","2,336","2,254","2,362","3,047","3,213","2,963","2,759","2,882","3,048","3,172","3,253","3,353","3,165","3,192","3,072","3,040","3,089","3,183","3,306","3,199","3,151","3,143","3,291","3,261","3,181","3,160","3,338","3,561","3,743","3,837","3,666","3,520","3,227","3,360","3,290","2,905","2,622","2,810","2,726","2,696","2,468","2,283","2,391","2,552","2,197","2,254","2,339","2,326","2,348","2,337","2,464","2,849","3,031","3,448","3,199","2,854","1,853","2,145","2,355","2,142","2,249","1,995","1,700","1,375","1,432","1,312","1,106",963,802,728,657,610,490,393,335,275,242,145,98,68,70,40,28,19,13,10,4,3,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"43,506"

11111,,,,xx市,,,,2011/6/1,女,"202,921","1,843","1,894","1,879","1,828","1,905","1,931","2,012","2,031","1,980","2,038","2,014","1,975","2,037","2,078","2,092","1,975","2,099","2,075","2,274","2,176","2,250","2,094","2,268","2,121","2,150","2,206","2,143","2,280","2,340","2,263","2,450","2,482","2,471","2,619","2,517","2,562","2,690","2,686","2,670","2,812","2,871","2,926","3,199","3,336","3,310","3,280","3,064","2,903","2,930","2,862","2,603","2,308","2,413","2,256","2,372","2,239","2,241","2,297","2,304","2,159","2,214","2,263","2,341","2,372","2,637","2,724","2,836","3,074","3,365","3,470","2,758","1,772","2,239","2,420","2,175","2,210","1,979","1,726","1,421","1,489","1,388","1,386","1,210","1,190","1,064",962,907,824,753,701,619,525,422,322,276,225,176,135,92,71,32,29,17,11,4,5,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"49,011"

このデータの指定した部分だけ(数値など)の削除を行いたいです。

<?php setlocale(LC_ALL, 'ja_JP.UTF-8'); $file = 'data.csv'; $data = file_get_contents($file); $temp = tmpfile(); $csv = array(); $key = 0; fwrite($temp, $data); rewind($temp); while (($data = fgetcsv($temp, 0, ",")) !== FALSE) { $csv[$key] = $data; $key = $key + 1; } //削除実行 unset($csv[0]); print_r($csv); fclose($temp); var_dump($csv);

よければ回答よろしくお願いします。

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

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

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

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

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

m.ts10806

2017/07/25 05:54

タイトルの「グラフ化」とはなんのことでしょう?
Ai_no_Osa

2017/07/25 07:25

グラフ化はしません。間違えていました、すいません。
m.ts10806

2017/07/25 07:26 編集

「指定した部分だけ(数値など)」という記述からは何を削除したいのか分かりません。レコード自体なのか、レコード内のデータなのか、レコード内のデータならどのようなデータなのか。具体的に記述をお願いします。回答はしていますがあくまでレコード自体の削除のための記述となっています。
Ai_no_Osa

2017/07/25 07:51

レコード内のデータです。例えば、年月(2011/1/1)の部分だけを削除したいと考えています。
m.ts10806

2017/07/25 07:53

「何列目に何がある」といった感じで場所は決まってるんですよね?
m.ts10806

2017/07/25 08:04

サンプルコード追記しました。ご確認お願い致します。
Ai_no_Osa

2017/07/25 09:38

ありがとうございます。コードを試してみたらうまくいきました。ちなみに行毎の削除はできるのでしょうか?
guest

回答1

0

ベストアンサー

提示の通りに入っているとしたら「女」がある行は2行目なので

PHP

1unset($csv[0]); 23unset($csv[1]);

ですね。

直後に削除する前提のデータを含む配列変数を作るというのは冗長な感じがしますし、一瞬とはいえ無駄なメモリを使っていることになります。
いっそのことwhileの中で「女」を含んでいる行を読み飛ばすようにした方が良いのかなと思います。

補足:
0から始まる連番の配列を作る際は連番用の変数を作らなくても配列名[]に情報を入れていくと0から連番にしてくれます。
変数「$key」も不要となるので、コードがよりすっきりしますよ。

PHP

1while (($data = fgetcsv($temp, 0, ",")) !== FALSE) { 2 $csv[] = $data; 3}

質問に追加を受けての追記

全てのレコードで同じ列を削除したい場合はこんな感じに書くと良いです。

PHP

1//削除したい列を定義 2$delete_column = array(4,8,5); 3//レコードの左端を0番目としてカウントしていって削除したい列番を列挙する 4 5while (($data = fgetcsv($temp, 0, ",")) !== FALSE) { 6 foreach($delete_column as $col_num){ 7 unset($data[$col_num]); 8 } 9 $csv[] = $data; 10} 11var_dump($csv);

もし削除したい列が1つとかであればforeachしなくても指定列番を普通に削除するように記述すると良いです。

PHP

1while (($data = fgetcsv($temp, 0, ",")) !== FALSE) { 2 unset($data[8]); //例示のデータだと日付部分 3 $csv[] = $data; 4}

投稿2017/07/25 06:03

編集2017/07/25 08:06
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問