Skip to content

Latest commit

 

History

History
216 lines (210 loc) · 4.87 KB

EDM_Preprocess.md

File metadata and controls

216 lines (210 loc) · 4.87 KB

EDM のデータ アップロード用に全角の英数字・記号を半角に変換する

こちらの PowerShell のサンプルで、EDM のデータ アップロード用の CSV ファイルを事前処理し、全角の英数字・記号を半角に変換することを目的に、半角カナを全角カナに変換します。変換元ファイルは、BOM 付き UTF-8、UTF-16 LE、UTF-16 BE のいずれかである必要があり、BOM なし UTF-8 は NG です。既定のファイル出力結果は、UTF-16 LE になります。

Normalize メソッドを利用する方法

以下のサンプルは Normalize メソッドを利用して行ごとに一括正規化します。

$source="E:\WorkData\Comp\EDM_Test\DB\EDM_CustomerDB.csv"
$target="E:\WorkData\Comp\EDM_Test\DB\EDM_CustomerDB_c.csv"

$output=@()
$lines=Get-Content $source
foreach($line in $lines){
   $output+=$line.Normalize([System.Text.NormalizationForm]::FormKC)
}
$output|out-file $target

実行結果

変換前

ABCabc
ABCabc
03-3333-3333
03-3333-3333
品川 駅
品川 駅
#$%&
#$%&
アイウエオ
ァィゥェォ
ァィゥェォ
パピプペポ
パピプペポ
ダヂヅデド
ダヂヅデド
ャュョ
ャュョ

変換後

ABCabc
ABCabc
03-3333-3333
03-3333-3333
品川 駅
品川 駅
#$%&
#$%&
アイウエオ
ァィゥェォ
ァィゥェォ
パピプペポ
パピプペポ
ダヂヅデド
ダヂヅデド
ャュョ
ャュョ

愚直に文字置換する方法

以下のサンプルは愚直に 1 文字 1 文字置き換えるコードの例です。ただし、こちらの場合は、半角カナを考慮していません。半角カナを置き換える場合、濁音・半濁音が独立した文字となっており、2 文字 -> 1 文字の置換となるため、実装の工夫が必要です。

$source="E:\WorkData\Comp\EDM_Test\DB\EDM_CustomerDB.csv"
$target="E:\WorkData\Comp\EDM_Test\DB\EDM_CustomerDB_c.csv"

function ConvertTo-SingleBytes($str){
$chars=$str.ToCharArray()
$out = [char[]]::new($str.Length)
$count=0
foreach($char in $chars){
    $out[$count]=switch -CaseSensitive($char){
    '1' {'1';break}
    '2' {'2';break}
    '3' {'3';break}
    '4' {'4';break}
    '5' {'5';break}
    '6' {'6';break}
    '7' {'7';break}
    '8' {'8';break}
    '9' {'9';break}
    '0' {'0';break}
    ' ' {' ';break}
    'A' {'A';break}
    'B' {'B';break}
    'C' {'C';break}
    'D' {'D';break}
    'E' {'E';break}
    'F' {'F';break}
    'G' {'G';break}
    'H' {'H';break}
    'I' {'I';break}
    'J' {'J';break}
    'K' {'K';break}
    'L' {'L';break}
    'M' {'M';break}
    'N' {'N';break}
    'O' {'O';break}
    'P' {'P';break}
    'Q' {'Q';break}
    'R' {'R';break}
    'S' {'S';break}
    'T' {'T';break}
    'U' {'U';break}
    'V' {'V';break}
    'W' {'W';break}
    'X' {'X';break}
    'Y' {'Y';break}
    'Z' {'Z';break}
    'a' {'a';break}
    'b' {'b';break}
    'c' {'c';break}
    'd' {'d';break}
    'e' {'e';break}
    'f' {'f';break}
    'g' {'g';break}
    'h' {'h';break}
    'i' {'i';break}
    'j' {'j';break}
    'k' {'k';break}
    'l' {'l';break}
    'm' {'m';break}
    'n' {'n';break}
    'o' {'o';break}
    'p' {'p';break}
    'q' {'q';break}
    'r' {'r';break}
    's' {'s';break}
    't' {'t';break}
    'u' {'u';break}
    'v' {'v';break}
    'w' {'w';break}
    'x' {'x';break}
    'w' {'y';break}
    'z' {'z';break}
    '!' {'!';break}
    '#' {'#';break}
    '$' {'$';break}
    '%' {'%';break}
    '&' {'&';break}
    '^' {'^';break}
    '¥' {'\';break}
    '@' {'@';break}
    ';' {';';break}
    ':' {':';break}
    ',' {',';break}
    '.' {'.';break}
    '/' {'/';break}
    '=' {'=';break}
    '~' {'~';break}
    '|' {'|';break}
    '‘' {'`';break}
    '{' {'{';break}
    '+' {'+';break}
    '*' {'*';break}
    '}' {'}';break}
    '<' {'<';break}
    '>' {'>';break}
    '?' {'?';break}
    '_' {'_';break}
    '﹣' {'-';break}
    '-' {'-';break}
    default {$char}
    }
    $count++
  }
  return [String]::new($out)
}

$output=@()
$lines=Get-Content $source
foreach($line in $lines){
   $output+=ConvertTo-SingleBytes $line
}
$output|out-file $target

実行結果

変換前

ABCabc
ABCabc
03-3333-3333
03-3333-3333
品川 駅
品川 駅
#$%&
#$%&
アイウエオ
ァィゥェォ
ァィゥェォ
パピプペポ
パピプペポ
ダヂヅデド
ダヂヅデド
ャュョ
ャュョ

変換後

ABCabc
ABCabc
03-3333-3333
03-3333-3333
品川 駅
品川 駅
#$%&
#$%&
アイウエオ
ァィゥェォ
ァィゥェォ
パピプペポ
パピプペポ
ダヂヅデド
ダヂヅデド
ャュョ
ャュョ