質問編集履歴

3

試したことの追加

2020/02/21 08:03

投稿

Hir19
Hir19

スコア12

test CHANGED
File without changes
test CHANGED
@@ -3,6 +3,8 @@
3
3
 
4
4
 
5
5
  読み込んだCSVデータの列数を正確なものを取得したい。
6
+
7
+ (この問題に対しての対処方法を知りたい)
6
8
 
7
9
 
8
10
 
@@ -10,7 +12,33 @@
10
12
 
11
13
  全部で739フィールドあるはずなのに、
12
14
 
13
- ものによって1~2フィールド欠けてしまう
15
+ ものによって1~2フィールド欠けてしまう
16
+
17
+
18
+
19
+ ズレているCSVのデータが以下のようになっていました。
20
+
21
+ |文字コード|カンマ区切りデータ|
22
+
23
+ |:--|--:|
24
+
25
+ |sjis|"27229022000","中野","","32-5","",|
26
+
27
+ |UTF-8|"27229022000","����","","�R�Q��T","",|
28
+
29
+
30
+
31
+ ずれが発生している該当箇所のレコードの中身
32
+
33
+ ```php
34
+
35
+ 16 => "27229022000"
36
+
37
+ 17 => "中野",",32-5""
38
+
39
+ 18 => ""
40
+
41
+ ```
14
42
 
15
43
 
16
44
 
@@ -24,11 +52,69 @@
24
52
 
25
53
  ### 試したこと
26
54
 
27
- 処理を切り分けた結果
55
+ 1.処理を切り分けた結果
28
56
 
29
57
  FTPで取得したCSVの列数はあっているのを確認できたので、
30
58
 
31
- CSVの読み込み部分に問題があることになります
59
+ CSVの読み込み部分に問題があることになります
60
+
61
+
62
+
63
+ 2.setlocale(LC_ALL, "ja_JP.utf8")から
64
+
65
+ setlocale(LC_ALL, "Japanese_Japan.932")に変更したが意味なかった;
66
+
67
+
68
+
69
+ 3.以下のようにコードを変更したがこれも意味がなかった
70
+
71
+ ```php
72
+
73
+ public function import()
74
+
75
+ {
76
+
77
+ \Log::channel('batch')->info("START IMPORT" . "\n");
78
+
79
+
80
+
81
+ setlocale(LC_ALL, "ja_JP.utf8");
82
+
83
+ $csv_path = 'app/csvs/'. $this->now .'.csv';
84
+
85
+
86
+
87
+
88
+
89
+ $data = file_get_contents(storage_path($csv_path));
90
+
91
+ $data = mb_convert_encoding($data, 'UTF-8', 'utf8,SJIS-win');
92
+
93
+ $temp = tmpfile(); //テンポラリファイルの作成
94
+
95
+ $meta = stream_get_meta_data($temp); //メタデータの取得
96
+
97
+ fwrite($temp, $data); //ファイル書き込み
98
+
99
+ rewind($temp); //ファイルポインタの位置を戻す
100
+
101
+
102
+
103
+ $file = new SplFileObject($meta['uri'], 'rb');
104
+
105
+ $file->setFlags(
106
+
107
+ \SplFileObject::READ_CSV |
108
+
109
+ \SplFileObject::READ_AHEAD |
110
+
111
+ \SplFileObject::SKIP_EMPTY |
112
+
113
+ \SplFileObject::DROP_NEW_LINE
114
+
115
+ );
116
+
117
+ ```
32
118
 
33
119
 
34
120
 
@@ -36,7 +122,7 @@
36
122
 
37
123
 
38
124
 
39
- ```ここに言語名を入力
125
+ ```php
40
126
 
41
127
  public function setFile() #FTP先から文字コードsjisのファイルを取得
42
128
 

2

試したことの追加

2020/02/21 08:03

投稿

Hir19
Hir19

スコア12

test CHANGED
File without changes
test CHANGED
@@ -19,6 +19,16 @@
19
19
  1.FTP通信にてcsvファイルをstorage/app 下に保存
20
20
 
21
21
  2.保存したcsvを読み込む
22
+
23
+
24
+
25
+ ### 試したこと
26
+
27
+ 処理を切り分けた結果
28
+
29
+ FTPで取得したCSVの列数はあっているのを確認できたので、
30
+
31
+ CSVの読み込み部分に問題があることになります
22
32
 
23
33
 
24
34
 

1

処理順序の追加

2020/02/21 07:30

投稿

Hir19
Hir19

スコア12

test CHANGED
File without changes
test CHANGED
@@ -11,6 +11,14 @@
11
11
  全部で739フィールドあるはずなのに、
12
12
 
13
13
  ものによって1~2フィールド欠けてしまう
14
+
15
+
16
+
17
+ ### 処理の順序
18
+
19
+ 1.FTP通信にてcsvファイルをstorage/app 下に保存
20
+
21
+ 2.保存したcsvを読み込む
14
22
 
15
23
 
16
24