Используя функцию 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()
возвращает строку, которая включает перевод строки в конце. Так $fesult[6]
в конце есть новая строка, поэтому $fiv
попадает на следующую строку. Решение состоит в том, чтобы обрезать ввод перед взрывом, а затем написать новую строку в выходных данных.
Дополнительная строка в том, что вы проверяете 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);
}
Других решений пока нет …