質問編集履歴

4

ソースコードの修正

2024/02/19 06:38

投稿

MIYABIIM
MIYABIIM

スコア1

test CHANGED
File without changes
test CHANGED
@@ -36,19 +36,68 @@
36
36
 
37
37
  ```PowerShell
38
38
  #比較するCSVらがあるフォルダ
39
- $work_path = "C:\Users\Work"
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

メモリリーク→メモリ不足

2024/02/15 06:42

投稿

MIYABIIM
MIYABIIM

スコア1

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

前提条件修正

2024/02/15 04:23

投稿

MIYABIIM
MIYABIIM

スコア1

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

問題点の詳細追加

2024/02/15 04:21

投稿

MIYABIIM
MIYABIIM

スコア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