私のクライアントがタブ区切りテキストファイルを自分のシステム(FIAdmin SCS)にインポートする必要があるピックルのようなものです。残念ながら、クライアントやソフトウェアのサポートチームはPHPについて何も知らない。彼らは、ファイルが間違った形式のエラーを取得し続けます。PHPとExcelで生成されたタブ区切りテキストファイルの相違
私はこのようなDBからファイルを生成しています:
$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のですファイル、エクスポート時に動作します)。私はfputcsv()
、\t
の代わりにchr(9)
、\r\n
、implode()
の代わりに空白文字列、fwrite()
の代わりにスペースを使用するなど、さまざまな方法を試しました。これらのどれも動作していないようです。
唯一の違いはファイルサイズです。生成されるファイルはすべて396バイトですが、元のファイルは〜254バイトです。だから私はアイデアがなくなったように...なぜPHPはファイルを大きく生成されますか?それは私の仕事を台無しにするかもしれない何が追加情報ですか?
提案:「16進表示」をサポートするテキストエディタをお探しください。私の推測では、PHPがLinuxサーバー上で生成されている可能性があります...(Windows CR/LFの代わりに)改行を持つ可能性があります。これは、Excelの混乱を混乱させる可能性があります。 – paulsm4
@ palsm4、私はここで何を正確に見ていますか? [オリジナルファイル](https://postimg.org/image/5598ksa8x/)は実際に[生成されたファイル](https://postimg.org/image/bufs0svkx/)よりかなり短く見えます。それは右/作業 "タブ"は0x0909としてマークされているようだが、PHPは0x0920としてそれを生成します。しかし、再び、ファイルの始めに、PHPはタブを正しく生成しますか? – jeesus
@ paulsm4あなたは正しいです。 16進コードをチェックした後、私は問題を解決したと思う。行末とタブが正しく生成されませんでした。ありがとう! – jeesus