php fgets、fwrite 和换行符
php fgets, fwrite and newline
使用 php fgets 函数,我正在读取一个文件,文件 "A" 是一种特定的格式,我正在写入另一个文件,文件 "B" 是一种特定的格式使用 fwrite 格式化。
然而,无论我放什么新行或换行符,一些字符总是错位。
下面是我希望在新文件中看到的格式,文件 B:
ICCID,IMSI,KI,ESN,PIN1,PUK1,PIN2,PUK2,IMSI2,KI2,ACC_NBR,NAI_USERNAME,NAI_PASS
8926003010422000616F,,,645030142200061,2064,16002217,4029,34594354,,,,,
8926003010422000624F,,,645030142200062,8678,91445678,5351,06417774,,,,,
8926003010422000632F,,,645030142200063,0356,51052167,6976,27210792,,,,,
8926003010422000640F,,,645030142200064,5504,38104570,4917,61385706,,,,,
8926003010422000657F,,,645030142200065,7158,23625228,2726,13487033,,,,,
8926003010422000665F,,,645030142200066,3922,52488665,6014,33705660,,,,,
但下面正是我得到的:
ICCID,IMSI,KI,ESN,PIN1,PUK1,PIN2,PUK2,IMSI2,KI2,ACC_NBR,NAI_USERNAME,NAI_PASS
8926003010422000608F,,,645030142200060,3741,26564507,7283,13507659
,,,,,8926003010422000616F,,,645030142200061,2064,16002217,4029,34594354
,,,,,8926003010422000624F,,,645030142200062,8678,91445678,5351,06417774
,,,,,8926003010422000632F,,,645030142200063,0356,51052167,6976,27210792
,,,,,8926003010422000640F,,,645030142200064,5504,38104570,4917,61385706
,,,,,8926003010422000657F,,,645030142200065,7158,23625228,2726,13487033
,,,,,,,,,,,,,,,,,
你会注意到字符 ,,,,,
被放在一行的开头,而不是我希望它们出现的结尾。还要注意最后一行变为 ,,,,,,,,,,,,,,,,,
。根本不需要。
下面是读写的代码。需要有人帮我解决这个问题。
$headStockin= "ICCID,IMSI,KI,ESN,PIN1,PUK1,PIN2,PUK2,IMSI2,KI2,ACC_NBR,NAI_USERNAME,NAI_PASSWORD"."\r\n";
$file = fopen($inputFile, "r"); // reading input file
$myStockinfile = fopen($inputFile."_StockIn.txt", "wb") or die("Unable to create/open a file!");
fwrite($myStockinfile, $headStockin);
$thr=",,,";
$one=",";
$fiv=",,,,,";
$lineNo = 0;
$startLine = 21;
while(!feof($file)){
$lineNo++;
$line = fgets($file);
if ($lineNo >= $startLine) {
$result = explode(" ", $line);
$in= $result[2].$thr.$result[1].$one.$result[3].$one.$result[5].$one.$result[4].$one.$result[6].$fiv;
echo $in; //to see output on html
fwrite($myStockinfile,$in);
}
}
fclose($file);
fclose($myStockinfile);
}
INPUT FILE BELOW
*
********************************************************************************
* HEADER DESCRIPTION
********************************************************************************
*
Quantity: 5000
*
********************************************************************************
* INPUT VARIABLES
********************************************************************************
*
var_in_list:
IMSI: 645030142200060
Ser_Nb: 8926003010422000608F
*
********************************************************************************
* OUTPUT VARIABLES
********************************************************************************
*
var_out:MSISDN/IMSI/ICCID/PIN1/PIN2/PUK1/PUK2
+260950605404 645030142200060 8926003010422000608F 3741 7283 26564507 13507659
+260950605411 645030142200061 8926003010422000616F 2064 4029 16002217 34594354
+260950605412 645030142200062 8926003010422000624F 8678 5351 91445678 06417774
+260950605416 645030142200063 8926003010422000632F 0356 6976 51052167 27210792
+260950605418 645030142200064 8926003010422000640F 5504 4917 38104570 61385706
+260950605421 645030142200065 8926003010422000657F 7158 2726 23625228 13487033
错位的逗号是因为 fgets()
returns 字符串末尾包含换行符。所以 $fesult[6]
最后有一个换行符,所以 $fiv
被放到下一行。解决方法是trim爆破前的输入,然后在你的输出中写一个换行符
额外的行是因为您在阅读该行之前要测试 EOF。 feof()
直到 在 阅读文件末尾后才被检测到。
因此将循环更改为:
while ($line = fgets($file)) {
$lineNo++;
if ($lineNo < 21) { // Skip first 20 lines
continue;
}
$line = rtrim($line);
$result = explode(" ", $line);
$in= $result[2].$thr.$result[1].$one.$result[3].$one.$result[5].$one.$result[4].$one.$result[6].$fiv.PHP_EOL;
echo $in;
fwrite($myStockinfile, $in);
}
使用 php fgets 函数,我正在读取一个文件,文件 "A" 是一种特定的格式,我正在写入另一个文件,文件 "B" 是一种特定的格式使用 fwrite 格式化。 然而,无论我放什么新行或换行符,一些字符总是错位。 下面是我希望在新文件中看到的格式,文件 B:
ICCID,IMSI,KI,ESN,PIN1,PUK1,PIN2,PUK2,IMSI2,KI2,ACC_NBR,NAI_USERNAME,NAI_PASS
8926003010422000616F,,,645030142200061,2064,16002217,4029,34594354,,,,,
8926003010422000624F,,,645030142200062,8678,91445678,5351,06417774,,,,,
8926003010422000632F,,,645030142200063,0356,51052167,6976,27210792,,,,,
8926003010422000640F,,,645030142200064,5504,38104570,4917,61385706,,,,,
8926003010422000657F,,,645030142200065,7158,23625228,2726,13487033,,,,,
8926003010422000665F,,,645030142200066,3922,52488665,6014,33705660,,,,,
但下面正是我得到的:
ICCID,IMSI,KI,ESN,PIN1,PUK1,PIN2,PUK2,IMSI2,KI2,ACC_NBR,NAI_USERNAME,NAI_PASS
8926003010422000608F,,,645030142200060,3741,26564507,7283,13507659
,,,,,8926003010422000616F,,,645030142200061,2064,16002217,4029,34594354
,,,,,8926003010422000624F,,,645030142200062,8678,91445678,5351,06417774
,,,,,8926003010422000632F,,,645030142200063,0356,51052167,6976,27210792
,,,,,8926003010422000640F,,,645030142200064,5504,38104570,4917,61385706
,,,,,8926003010422000657F,,,645030142200065,7158,23625228,2726,13487033
,,,,,,,,,,,,,,,,,
你会注意到字符 ,,,,,
被放在一行的开头,而不是我希望它们出现的结尾。还要注意最后一行变为 ,,,,,,,,,,,,,,,,,
。根本不需要。
下面是读写的代码。需要有人帮我解决这个问题。
$headStockin= "ICCID,IMSI,KI,ESN,PIN1,PUK1,PIN2,PUK2,IMSI2,KI2,ACC_NBR,NAI_USERNAME,NAI_PASSWORD"."\r\n";
$file = fopen($inputFile, "r"); // reading input file
$myStockinfile = fopen($inputFile."_StockIn.txt", "wb") or die("Unable to create/open a file!");
fwrite($myStockinfile, $headStockin);
$thr=",,,";
$one=",";
$fiv=",,,,,";
$lineNo = 0;
$startLine = 21;
while(!feof($file)){
$lineNo++;
$line = fgets($file);
if ($lineNo >= $startLine) {
$result = explode(" ", $line);
$in= $result[2].$thr.$result[1].$one.$result[3].$one.$result[5].$one.$result[4].$one.$result[6].$fiv;
echo $in; //to see output on html
fwrite($myStockinfile,$in);
}
}
fclose($file);
fclose($myStockinfile);
}
INPUT FILE BELOW
*
********************************************************************************
* HEADER DESCRIPTION
********************************************************************************
*
Quantity: 5000
*
********************************************************************************
* INPUT VARIABLES
********************************************************************************
*
var_in_list:
IMSI: 645030142200060
Ser_Nb: 8926003010422000608F
*
********************************************************************************
* OUTPUT VARIABLES
********************************************************************************
*
var_out:MSISDN/IMSI/ICCID/PIN1/PIN2/PUK1/PUK2
+260950605404 645030142200060 8926003010422000608F 3741 7283 26564507 13507659
+260950605411 645030142200061 8926003010422000616F 2064 4029 16002217 34594354
+260950605412 645030142200062 8926003010422000624F 8678 5351 91445678 06417774
+260950605416 645030142200063 8926003010422000632F 0356 6976 51052167 27210792
+260950605418 645030142200064 8926003010422000640F 5504 4917 38104570 61385706
+260950605421 645030142200065 8926003010422000657F 7158 2726 23625228 13487033
错位的逗号是因为 fgets()
returns 字符串末尾包含换行符。所以 $fesult[6]
最后有一个换行符,所以 $fiv
被放到下一行。解决方法是trim爆破前的输入,然后在你的输出中写一个换行符
额外的行是因为您在阅读该行之前要测试 EOF。 feof()
直到 在 阅读文件末尾后才被检测到。
因此将循环更改为:
while ($line = fgets($file)) {
$lineNo++;
if ($lineNo < 21) { // Skip first 20 lines
continue;
}
$line = rtrim($line);
$result = explode(" ", $line);
$in= $result[2].$thr.$result[1].$one.$result[3].$one.$result[5].$one.$result[4].$one.$result[6].$fiv.PHP_EOL;
echo $in;
fwrite($myStockinfile, $in);
}