質問編集履歴
4
ソースコードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -36,19 +36,68 @@
|
|
36
36
|
|
37
37
|
```PowerShell
|
38
38
|
#比較するCSVらがあるフォルダ
|
39
|
-
$work_path = "C:\
|
39
|
+
$work_path = "C:\重複リスト出力\データ"
|
40
|
-
|
40
|
+
$work_path2 = "C:\重複リスト出力\キーファイル\keyFile.csv"
|
41
|
+
$work_path3 = "C:\重複リスト出力\結果\重複リスト.csv"
|
41
42
|
Set-Location -Path $work_path
|
42
43
|
|
43
44
|
#作業フォルダ内で拡張子が.csvのみのファイルをフィルターして取得
|
44
45
|
$csv_files = Get-ChildItem -File -Filter *.csv
|
45
46
|
|
47
|
+
#キーファイル作成
|
48
|
+
$keyfiles = @()
|
49
|
+
$duplicate_list = @()
|
50
|
+
$headers = @('KDB個人番号','氏名_カナ','生年月日','郵便番号')
|
51
|
+
|
52
|
+
|
46
53
|
Write-Host $csv_files
|
47
54
|
|
48
55
|
foreach($csv_file in $csv_files){
|
56
|
+
|
57
|
+
#CSV読み込み
|
58
|
+
$path = Join-Path $work_path $csv_file
|
59
|
+
$csvdata = Import-Csv $Path -Encoding unicode
|
49
60
|
|
61
|
+
if(Test-Path $work_path2){
|
62
|
+
$keyfiles = Import-Csv $work_path2 -Encoding unicode
|
63
|
+
}
|
64
|
+
#レコード分ループ
|
65
|
+
foreach($row in $csvdata){
|
50
66
|
|
67
|
+
#判定
|
68
|
+
$newdata = $keyfiles | Where-Object {($_.氏名_カナ -eq $row.氏名_カナ) -and ($_.生年月日 -eq $row.生年月日_西暦) -and ($_.郵便番号 -eq $row.郵便番号)}
|
69
|
+
if($newdata.Count -eq 0){
|
70
|
+
|
71
|
+
#重複していないデータの場合、キーファイルに追加
|
72
|
+
$record = New-Object PSObject | Select-Object $headers
|
73
|
+
$record.KDB個人番号 = $row.KDB個人番号
|
74
|
+
$record.氏名_カナ = $row.氏名_カナ
|
75
|
+
$record.生年月日 = $row.生年月日_西暦
|
76
|
+
$record.郵便番号 = $row.郵便番号
|
77
|
+
$keyfiles += $record
|
78
|
+
}else{
|
79
|
+
|
80
|
+
if(($duplicate_list | Where-Object {($_.氏名_カナ -eq $row.氏名_カナ) -and ($_.生年月日 -eq $row.生年月日_西暦) -and ($_.郵便番号 -eq $row.郵便番号)}).Count -eq 0){
|
81
|
+
|
82
|
+
#既にキーファイルに存在するかつ重複リストに存在しない場合、重複リストに追加
|
83
|
+
$record = New-Object PSObject | Select-Object $headers
|
84
|
+
$record.KDB個人番号 = $row.KDB個人番号
|
85
|
+
$record.氏名_カナ = $row.氏名_カナ
|
86
|
+
$record.生年月日 = $row.生年月日_西暦
|
87
|
+
$record.郵便番号 = $row.郵便番号
|
88
|
+
$duplicate_list += $record
|
89
|
+
|
90
|
+
}
|
91
|
+
|
92
|
+
}
|
93
|
+
|
94
|
+
}
|
95
|
+
#CSV読み終わるごとにCSV出力(メモリ削減のため)
|
96
|
+
$keyfiles | Export-Csv -Encoding unicode -NoTypeInformation -Path $work_path2
|
51
97
|
}
|
98
|
+
|
99
|
+
#重複リストに出力
|
100
|
+
$duplicate_list | Export-Csv -Encoding unicode -NoTypeInformation -Path $work_path3
|
52
101
|
```
|
53
102
|
|
54
103
|
### 試したこと・調べたこと
|
3
メモリリーク→メモリ不足
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
### 発生している問題・分からないこと
|
26
26
|
sort -Unique等での実装を考えたが、CSVの容量が重く実装が難しかった。
|
27
|
-
0. 番号リストimport-csvで読み込もうとしたところでメモリ
|
27
|
+
0. 番号リストimport-csvで読み込もうとしたところでメモリ不足が発生して処理が行えない
|
28
28
|
1.sort -Uniqueは重複を削除してしまい、今回得たい結果とは異なるので断念。
|
29
29
|
|
30
30
|
|
2
前提条件修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
Powershellを使用
|
4
4
|
CSVは同一フォルダに格納
|
5
5
|
各CSVは列数が異なるが、キー項目のインデックスは同じ
|
6
|
+
CSVのサイズは最大6GBほど
|
6
7
|
|
7
8
|
### 実現したいこと
|
8
9
|
csvファイル)
|
1
問題点の詳細追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -23,6 +23,10 @@
|
|
23
23
|
|
24
24
|
### 発生している問題・分からないこと
|
25
25
|
sort -Unique等での実装を考えたが、CSVの容量が重く実装が難しかった。
|
26
|
+
0. 番号リストimport-csvで読み込もうとしたところでメモリリークが発生して処理が行えない
|
27
|
+
1.sort -Uniqueは重複を削除してしまい、今回得たい結果とは異なるので断念。
|
28
|
+
|
29
|
+
|
26
30
|
単純なスキル不足から実装方法が見えてこない。
|
27
31
|
|
28
32
|
|