hayateasdf's blog

Unity,C#, javascript,C++,python,batなど

1行csv読み込みw

static string[][] getCsv(string path)
{
  return File.ReadLines(path).Select(x => x.Split(new []{','}, StringSplitOptions.RemoveEmptyEntries)).ToArray();
}

簡単な内部結合

var product = new[]{
    new { Id = 1, name = "item1" },
    new { Id = 2, name = "item2" },
    new { Id = 3, name = "item3" },
    new { Id = 5, name = "item5" },
};
var price = new[] {
    new { Id = 1, price = 100 },
    new { Id = 2, price = 200 },
    new { Id = 3, price = 300 },
    new { Id = 4, price = 400 },
};

var query = product
    .Join(
        price,
        x => x.Id,
        y => y.Id,
        (x, y) => new { Name = x.name, Price = y.price }
    );

foreach (var v in query)
{
    Console.WriteLine(string.Format("{0} : ${1}", v.Name, v.Price));
}

出力

item1 : $100
item2 : $200
item3 : $300

Idが一致しているデータのみが取得される。

http://blogs.yahoo.co.jp/dk521123/17905755.html

GroupByで重複しているIDをグループ化

var ids = new[] { 1, 3, 5, 7, 9, 1, 2, 3 };
// {id, index}の匿名型作成
// idをグループ化
var group_index = ids
    .Select((x, index) => new {id = x, index = index})
    .GroupBy(x => x.id);
    
// id == 1のグループとりだす
var check_id = 1;
var group = group_index
    .FirstOrDefault(x => x.Key == check_id)
    .ToArray();
    
    
foreach(var item in group)
{
    Console.WriteLine(string.Format("id = {0}, index = {1}", item.id, 
        item.index));
}

出力

id = 1, index = 0
id = 1, index = 5

全角アルファベット → 半角アルファベット変換

C#ではVisualBasicのStrConvを使えばできるみたいですが、 ちょっとめんどくさい設定が必要になるので、適当に自作。

    // 全角アルファベット -> 半角アルファベット
    public static string convertHalf(string s)
    {
        var all = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        var half = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        var c_ary = s.Select(c =>
        {
            var cc = all.Select((value, i) => new { Value = value, Index = i }).FirstOrDefault(item => item.Value == c);
            return cc == null ? c : half[cc.Index];
        }).ToArray();
        return new String(c_ary);
    }

sublimetext3 windowsでGit bashを即時実行

ファイル作成

test.sh

sublimetext3

Tools > Build System > New Build System

bashのパス指定

{
  "cmd": ["C:\\Program Files\\Git\\bin\\bash.exe", "$file"]
}
echo "hello world"

実行コマンド Ctrl+Shift+B

ftpユーザアクセス確認

user_list (user-name,password)

ftpuser ftpuser
user001 user001
user002 user002

check-ftp.sh

#!/bin/bash
start()
{
    local file_name="./user_list"
    local ip_addr="192.168.1.101" # アクセスしたいipアドレスを指定

    cat ${file_name} | while read line;
    do
        declare -a ary=(${line})
        echo "open ${ip_addr}" > tmp
        echo "user ${ary[0]} ${ary[1]}" >> tmp
        log="`ftp -n < ./tmp`"
        if [ "$log" == "" ]; then
            echo "${ary[0]}: success"
        else
            echo "${ary[0]}: ${log}" 
        fi
    done
    rm -f ./tmp
}
start

PropertyGrid + xml用クラス

追記

A Generic Clamp Function for C# - CodeProject

clamp関数を作ればもうチョイ見やすくなる。