各種言語でCSVファイル読込んで一部項目を取り出す方法のまとめ

How To Programming

さて、今日はCSVファイルを読み込んで一部項目だけを取得する方法について各種言語でまとめました。

読込はテキストファイルと同じ手順ですが、カンマ区切りを配列に格納していく処理が加わります。

以下のcsvファイルを読み込んで、一部項目のみを取得するサンプルコードを記載します。

No,Name,Seitou,Syozoku
1,Yamamoto Taro,ReiwaShinsengumi,TouDaihyo
2,Funago Yasuhiko,ReiwaShinsengumi,Sangiin
3,Kimura Eiko,ReiwaShinsengumi,Sangiin

perl

#!/usr/bin/perl
#
use strict;
use warnings;
use utf8;
my $filename = 'test.csv';
open(IN,$filename);
<IN>; ##一行目を読み飛ばす
while(<IN>){
        chomp;
        my @data=split(/,/,$_);
        print $data[0]," - ",$data[1]," - ",$data[2]," - ",$data[3],"\n";
}                                                                 

CSVの一部項目を取得したい場合、$dataの該当する順番の箇所のみをコードに含めると取得されます。

php

$lines = file('test.csv');
 
foreach($lines as $line){
	$data = explode(',',$line);
	
	echo '<p>';
        echo $data[0]." - ";
        echo $data[1]." - ";
        echo $data[2]." - ";
        echo $data[3];
        echo '</p>';
}

explode関数が区切り文字「,」で配列に格納します。これはperlのsplitの役割となります。しかし、項目がダブルコーテーションで括られている場合はfgetcsv関数を使って以下のようにします。

$fp = fopen('test.csv', 'r');
while (($data = fgetcsv($fp)) !== FALSE) {
	echo '<p>';
        echo $data[0]." - ";
        echo $data[1]." - ";
        echo $data[2]." - ";
        echo $data[3];
        echo '</p>';
}
fclose($fp);

尚、ファイルがShift-JISでWEBページ側がutf-8の場合、以下のように表示前に文字コード変換処理を加えます。

$data[1] = mb_convert_encoding($data[1],"utf-8","sjis");

ruby

標準ライブラリのcsvを使う

require 'csv'

CSV.foreach('test.csv') do |data|
  puts "#{data[0]} #{data[1]}: #{data[2]}"
end
require 'csv'

reiwa_stars = CSV.read('test.csv')
reiwa_stars.each do |data|
  puts "#{data[0]} #{data[1]}: #{data[2]}"
end

python

標準ライブラリのcsvを使う

import csv

filename='test.csv'
with open(filename) as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

go

package main
import (
    "encoding/csv"
    "fmt"
    "os"
)
func main() {
    file, err := os.Open("test.csv")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    reader := csv.NewReader(file)
    var line []string

    for {
        line, err = reader.Read()
        if err != nil {
            break
        }
        fmt.Println(line)
    }
}

java

import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Hello2 {

    public static void main(String args[]) {
        // 確認するフォルダとファイルのパスを指定する
        File file = new File("test.csv");
        // ファイルの存在を確認する
        if (file.exists()) {
            System.out.println("ファイルが存在します");
            try{
                BufferedReader br = new BufferedReader(new FileReader(file));
                String line;
                while((line = br.readLine()) != null){
                    String[] data = line.split(",",0);
                    for (String elem: data){
                            System.out.println(elem);
                    }
                }

                br.close();

            }catch(FileNotFoundException e){
                System.out.println(e);
            }catch(IOException e){
                System.out.println(e);
            }
        } else {
            System.out.println("ファイルが存在しません");
        }
    }

}