teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

試したことの追加

2020/02/21 08:03

投稿

Hir19
Hir19

スコア12

title CHANGED
File without changes
body CHANGED
@@ -1,23 +1,66 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
3
  読み込んだCSVデータの列数を正確なものを取得したい。
4
+ (この問題に対しての対処方法を知りたい)
4
5
 
5
6
  ### 発生している問題・エラーメッセージ
6
7
  全部で739フィールドあるはずなのに、
7
- ものによって1~2フィールド欠けてしまう
8
+ ものによって1~2フィールド欠けてしまう
8
9
 
10
+ ズレているCSVのデータが以下のようになっていました。
11
+ |文字コード|カンマ区切りデータ|
12
+ |:--|--:|
13
+ |sjis|"27229022000","中野","","32-5","",|
14
+ |UTF-8|"27229022000","����","","�R�Q��T","",|
15
+
16
+ ずれが発生している該当箇所のレコードの中身
17
+ ```php
18
+ 16 => "27229022000"
19
+ 17 => "中野",",32-5""
20
+ 18 => ""
21
+ ```
22
+
9
23
  ### 処理の順序
10
24
  1.FTP通信にてcsvファイルをstorage/app 下に保存
11
25
  2.保存したcsvを読み込む
12
26
 
13
27
  ### 試したこと
14
- 処理を切り分けた結果
28
+ 1.処理を切り分けた結果
15
29
  FTPで取得したCSVの列数はあっているのを確認できたので、
16
- CSVの読み込み部分に問題があることになります
30
+ CSVの読み込み部分に問題があることになります
17
31
 
32
+ 2.setlocale(LC_ALL, "ja_JP.utf8")から
33
+ setlocale(LC_ALL, "Japanese_Japan.932")に変更したが意味なかった;
34
+
35
+ 3.以下のようにコードを変更したがこれも意味がなかった
36
+ ```php
37
+ public function import()
38
+ {
39
+ \Log::channel('batch')->info("START IMPORT" . "\n");
40
+
41
+ setlocale(LC_ALL, "ja_JP.utf8");
42
+ $csv_path = 'app/csvs/'. $this->now .'.csv';
43
+
44
+
45
+ $data = file_get_contents(storage_path($csv_path));
46
+ $data = mb_convert_encoding($data, 'UTF-8', 'utf8,SJIS-win');
47
+ $temp = tmpfile(); //テンポラリファイルの作成
48
+ $meta = stream_get_meta_data($temp); //メタデータの取得
49
+ fwrite($temp, $data); //ファイル書き込み
50
+ rewind($temp); //ファイルポインタの位置を戻す
51
+
52
+ $file = new SplFileObject($meta['uri'], 'rb');
53
+ $file->setFlags(
54
+ \SplFileObject::READ_CSV |
55
+ \SplFileObject::READ_AHEAD |
56
+ \SplFileObject::SKIP_EMPTY |
57
+ \SplFileObject::DROP_NEW_LINE
58
+ );
59
+ ```
60
+
18
61
  ### CSV読み込みのソースコード
19
62
 
20
- ```ここに言語名を入力
63
+ ```php
21
64
  public function setFile() #FTP先から文字コードsjisのファイルを取得
22
65
  {
23
66
  \Log::channel('batch')->info("START SET CSV" . "\n");

2

試したことの追加

2020/02/21 08:03

投稿

Hir19
Hir19

スコア12

title CHANGED
File without changes
body CHANGED
@@ -10,6 +10,11 @@
10
10
  1.FTP通信にてcsvファイルをstorage/app 下に保存
11
11
  2.保存したcsvを読み込む
12
12
 
13
+ ### 試したこと
14
+ 処理を切り分けた結果
15
+ FTPで取得したCSVの列数はあっているのを確認できたので、
16
+ CSVの読み込み部分に問題があることになります
17
+
13
18
  ### CSV読み込みのソースコード
14
19
 
15
20
  ```ここに言語名を入力

1

処理順序の追加

2020/02/21 07:30

投稿

Hir19
Hir19

スコア12

title CHANGED
File without changes
body CHANGED
@@ -6,6 +6,10 @@
6
6
  全部で739フィールドあるはずなのに、
7
7
  ものによって1~2フィールド欠けてしまう
8
8
 
9
+ ### 処理の順序
10
+ 1.FTP通信にてcsvファイルをstorage/app 下に保存
11
+ 2.保存したcsvを読み込む
12
+
9
13
  ### CSV読み込みのソースコード
10
14
 
11
15
  ```ここに言語名を入力