Я как бы в рассоле, когда моему клиенту нужно импортировать текстовый файл с разделителями табуляции в свою собственную систему (FIAdmin SCS). К сожалению, ни клиент, ни служба поддержки программного обеспечения ничего не знают о PHP. Они продолжают получать ошибки, что файл имеет неправильный формат.
Я создаю файлы из БД следующим образом:
$fp = fopen("file.txt", "w");
foreach ($results as $key=>$res) {
$put[$key][1] = "DOT"; //Third party administrator
$put[$key][2] = ""; //Empty
$put[$key][3] = 10030; //Dealer number
$put[$key][4] = trim($res["keyfob_nr"]); //Contract number
$put[$key][5] = ""; //Empty
$put[$key][6] = ""; //Empty
$put[$key][7] = ""; //Empty
$put[$key][8] = ""; //Empty
$put[$key][9] = ""; //Empty
$put[$key][10] = trim($res["first_name"]);
$put[$key][11] = trim($res["last_name"]);
$put[$key][12] = ""; //Empty
$put[$key][13] = ""; //Empty
$put[$key][14] = trim($res["address"]);
$put[$key][15] = trim($res["city"]);
$put[$key][16] = trim($res["state"]);
$put[$key][17] = trim($res["zip"]);
$put[$key][18] = ""; //Empty
$put[$key][19] = ""; //Empty
$put[$key][20] = ""; //Empty
$put[$key][21] = ""; //Empty
$put[$key][22] = ""; //Empty
$put[$key][23] = ""; //Empty
$put[$key][24] = trim($res["vehicle_odometer"]);
$put[$key][25] = ""; //Empty
$put[$key][26] = ""; //Empty
$put[$key][27] = ""; //Empty
$put[$key][28] = ""; //Empty
$put[$key][29] = trim($res["vehicle_year"]);
$put[$key][30] = trim($res["vehicle_vin"]);
$put[$key][31] = ""; //Empty
$put[$key][32] = ""; //Empty
$put[$key][33] = ""; //Empty
$put[$key][34] = date("n/d/Y"); //Sale date
$put[$key][35] = ""; //Empty - vehicle purchase date
$put[$key][36] = ""; //Empty
$put[$key][37] = ""; //Empty
$put[$key][38] = ""; //Empty
$put[$key][39] = ""; //Empty - auto code (only if no VIN is provided)
$put[$key][40] = ""; //Lien Holder number
$put[$key][41] = ""; //Empty - reinsurance ID
$put[$key][42] = ""; //Empty
$put[$key][43] = ""; //Empty
$put[$key][44] = ""; //Empty
$put[$key][45] = ""; //Empty
$put[$key][46] = ""; //Empty - cancel check number
$put[$key][47] = date("n/d/Y"); //Empty - vehicle in service date (only for new cars)
$put[$key][48] = ""; //Empty
$put[$key][49] = ""; //Empty
$put[$key][50] = ""; //Empty
$put[$key][51] = ""; //Empty - member id
$put[$key][52] = ""; //Empty - no charge back flag
$put[$key][53] = ""; //Empty - contract entry date
$put[$key][54] = ""; //Empty
$put[$key][55] = trim("K".substr((string)$res["amount"], 0, 1)); //Plan code. REQUIRED
$put[$key][56] = 7; //Rate Book id. REQUIRED
$put[$key][57] = "N"; //New or used. REQUIRED
$put[$key][58] = 0; //Deductible amount. REQUIRED
$put[$key][59] = 0; //Deductible type. REQUIRED
$put[$key][60] = $res["term"] == 3 ? 36 : 60; //Contract Term Months. REQUIRED
$put[$key][61] = 999999; //Contract Term Mileage. REQUIRED
for ($i = 62; $i < 168; $i++) {
if ($i == 139) {
$put[$key][$i] = "SGPY";
}
else {
$put[$key][$i] = " ";
}
}
fputcsv($fp, $put[$key], "\t");
//fwrite($fp, implode("\t", $put[$key]));
}
fclose($fp);
Когда я импортирую файл в Excel, он визуально точно такой же, как и предоставленный мне образец файла (образец представляет собой файл *.xlsx, который, по их словам, работает при экспорте). Я пробовал разные способы, включая использование пробелов вместо пустых строк, fwrite()
вместо fputcsv()
, \t
вместо chr(9)
, \r\n
в конце implode()
и так далее. Ни один из них не работает.
Единственная разница, которую я вижу, это размер файла. Все мои сгенерированные файлы имеют размер 396 байт, а исходные - ~ 254 байта. Так как у меня закончились идеи... почему сгенерированный PHP файл больше? Какую дополнительную информацию он добавляет, что может испортить мою работу?