【study】CSV名簿ファイルを検索する(1) - findnam1

CSV名簿ファイルを検索する(1) - findnam1

概要

最終的には、末尾に参考書籍として挙げた「AWKを256倍使うための本」の「1-9 名簿ファイルを検索する」 を下記言語で作ることが目標。
 

 

meibo.csv を読み込んで表示するプログラムの作成

meibo.csv

mike,3
tora,1
hachi,10

 

awk

findnam1-1.sh

#!/bin/sh

## 全部の行を表示する
# awk '{print $0}' $1

## 区切りを , にする
# awk -F, '{print $1,$2}' $1

## フィールド数(FS)を使って、フィールドが可変になっても対応可能にする
awk -F, '{
    for( i = 1; i <= (NF-1); i++ ) {
        printf("%s,", $i)
    }
    printf("%s\n", $i)
}' $1

 

Python3

findnam1-1.py

#!/usr/bin/env python3

# https://docs.python.jp/3.3/library/csv.html
# https://docs.python.org/3.3/library/csv.html

import  csv

with open('meibo.csv', 'r', newline='') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',', quotechar='"')
    for row in spamreader:
        print(','.join(row))

 

Ruby

findnam1-1.py

#!/usr/bin/env ruby

require 'csv'

CSV.foreach("meibo.csv") do |row|
    STDOUT.printf("#{row[0]},#{row[1]}\n")
end

 

C#

  • monodevelop で、プロジェクト名を「findnam1」とする
  • 場所を「/home/neko/csharp/」とする
  • ファイル構成は後述した

 

/home/neko/csharp/findnam1/findnam1/Program.cs

using System;
using System.IO;

namespace findnam1
{
	class MainClass
	{
		public static void ReadCsvFile(string filePath)
		{
			string[] lines = File.ReadAllLines (filePath);
			foreach (string line in lines) {
				string[] items = line.Split (',');
				Console.WriteLine ("name={0}, age={1}", items [0], items [1]);
			}
		}

		public static void Main (string[] args)
		{
			ReadCsvFile ("meibo.csv");	
		}
	}
}

 

/home/neko/csharp/findnam1/findnam1/bin/Debug/meibo.csv
実行ファイルが「/home/neko/csharp/findnam1/findnam1/bin/Debug/findnum1.exe」として作られたので、本プログラムでは同階層に meibo.csv を置く必要がある。

mike,3
tora,1
hachi,10

 

ファイル構成
        /home/neko/csharp/
        └── findnam1
            ├── findnam1
            │   ├── Program.cs
            │   ├── Properties
            │   │   └── AssemblyInfo.cs
            │   ├── bin
            │   │   └── Debug
            │   │       ├── findnam1.exe
            │   │       ├── findnam1.pdb
            │   │       └── meibo.csv
            │   ├── findnam1.csproj
            │   └── obj
            │       └── x86
            │           └── Debug
            │               ├── findnam1.csproj.FilesWrittenAbsolute.txt
            │               ├── findnam1.exe
            │               └── findnam1.pdb
            ├── findnam1.sln
            └── findnam1.userprefs

 

参考にした書籍

実戦で役立つ C#プログラミングのイディオム/定石&パターン の Chapter2
AWKを256倍使うための本 (Ascii 256倍) の リスト1-9