回答編集履歴
4
コードの解説を追加
test
CHANGED
@@ -6,21 +6,21 @@
|
|
6
6
|
|
7
7
|
<?php
|
8
8
|
|
9
|
-
$dat = [];
|
9
|
+
$dat = []; // データ保持用配列の初期化
|
10
|
-
|
10
|
+
|
11
|
-
$tsv = file('340542.tsv');
|
11
|
+
$tsv = file('340542.tsv'); // ファイルからデータを行単位の配列データとして読み込み
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
-
foreach ($tsv as $line) {
|
15
|
+
foreach ($tsv as $line) { // 行単位のデータを順次処理
|
16
|
-
|
16
|
+
|
17
|
-
$line = chop($line);
|
17
|
+
$line = chop($line); // 行末の改行コードを除去
|
18
|
-
|
18
|
+
|
19
|
-
$arr = explode("\t", $line);
|
19
|
+
$arr = explode("\t", $line); // データの区切り文字TABを基準に配列に分解
|
20
|
-
|
20
|
+
|
21
|
-
$id = $arr[0];
|
21
|
+
$id = $arr[0]; // id値として1つ目のデータを採用
|
22
|
-
|
22
|
+
|
23
|
-
$dat[$id] = $arr;
|
23
|
+
$dat[$id] = $arr; // $datに格納
|
24
24
|
|
25
25
|
}
|
26
26
|
|
@@ -46,15 +46,15 @@
|
|
46
46
|
|
47
47
|
|
48
48
|
|
49
|
-
$fp = fopen('340542_out.tsv', 'w');
|
49
|
+
$fp = fopen('340542_out.tsv', 'w'); // 出力先ファイルをオープン
|
50
|
-
|
50
|
+
|
51
|
-
foreach ($dat as $arr) {
|
51
|
+
foreach ($dat as $arr) { // 行単位のデータを順次処理
|
52
|
-
|
52
|
+
|
53
|
-
fputs($fp, implode("\t", $arr) . PHP_EOL);
|
53
|
+
fputs($fp, implode("\t", $arr) . PHP_EOL); // 逆のこと:TABで1行分のデータを連結し、行末に改行コードを付与して、ファイルに出力
|
54
54
|
|
55
55
|
}
|
56
56
|
|
57
|
-
fclose($fp);
|
57
|
+
fclose($fp); // ファイルをクローズして保存
|
58
58
|
|
59
59
|
|
60
60
|
|
3
見直し
test
CHANGED
@@ -359,3 +359,19 @@
|
|
359
359
|
次回読み込むための構造と全く違う構造で書き込んでしまい、
|
360
360
|
|
361
361
|
つまりは破壊してしまいます。
|
362
|
+
|
363
|
+
|
364
|
+
|
365
|
+
ファイルに直接配列を書き出すことはできない、と考えてください。
|
366
|
+
|
367
|
+
人間が読んで理解できるテキストファイルは文字列データなので、
|
368
|
+
|
369
|
+
配列データをどーにかこーにかして文字列データに連結しないとファイルになりません。
|
370
|
+
|
371
|
+
配列の要素と要素の区切りをどうするか、
|
372
|
+
|
373
|
+
1行分のデータと1行分のデータの区切りをどうするか、
|
374
|
+
|
375
|
+
ルールを決めて読み書きしているわけです。
|
376
|
+
|
377
|
+
それを無視してfwrite()に配列ドーンじゃ無理です。
|
2
加筆
test
CHANGED
@@ -341,3 +341,21 @@
|
|
341
341
|
tsvっていう拡張子を使ったファイルは、データの区切りにTABコードを使ったものです。
|
342
342
|
|
343
343
|
真似して打ち込むときは、TABキーを押して入力してください。
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
---
|
348
|
+
|
349
|
+
|
350
|
+
|
351
|
+
> log.txtの中が初期化されてしまいます、なぜでしょう。
|
352
|
+
|
353
|
+
|
354
|
+
|
355
|
+
配列を配列データのままfwriteにわたすと、
|
356
|
+
|
357
|
+
配列から文字列への自動変換が起こり、
|
358
|
+
|
359
|
+
次回読み込むための構造と全く違う構造で書き込んでしまい、
|
360
|
+
|
361
|
+
つまりは破壊してしまいます。
|
1
見直し
test
CHANGED
@@ -32,6 +32,8 @@
|
|
32
32
|
|
33
33
|
|
34
34
|
|
35
|
+
// 2で始まる行の4番目の数値を+1している
|
36
|
+
|
35
37
|
$dat[2][3] = strval(intval($dat[2][3]) + 1);
|
36
38
|
|
37
39
|
|
@@ -335,3 +337,7 @@
|
|
335
337
|
|
336
338
|
|
337
339
|
質問はありますか?
|
340
|
+
|
341
|
+
tsvっていう拡張子を使ったファイルは、データの区切りにTABコードを使ったものです。
|
342
|
+
|
343
|
+
真似して打ち込むときは、TABキーを押して入力してください。
|