2007年12月8日 星期六

《 PHP》.txt 轉 .xls ( 特定格式轉換 )

家裏的老大姐小小花前天跑來問我問題,我盡然被看得起啊(受寵若驚)
研究所的資料庫探勘課程要弄資料分析,據說教授丟了一堆.txt


3:
1025579,4,2003-03-29
712664,5,2004-02-01
1331154,4,2004-07-03
2632461,3,2005-07-22
44937,5,2004-06-22
656399,4,2003-09-20
439011,1,2004-01-22
1436762,3,2003-03-17
1644750,3,2003-03-19
2031561,4,2004-03-31
616720,4,2003-08-10
2467008,4,2004-03-15
975874,5,2004-02-09
701730,2,2005-10-05
1614320,4,2003-08-11
115498,3,2003-07-16
931626,2,2004-07-08
.........


檔案只列出部份而已,以上數據分別代表"顧客編號","評等","評分日期"
不過41kb的 .txt 還真多資料啊,在加上有一萬多個 .txt 檔案要處理到 SQL Server
小小花是說,轉成 Excel 檔會比較方便,然後他 Lab 的同學好像也都覺得
一個一個轉檔很麻煩,因為一萬多筆會累死人呢!

所以幫忙寫了一個小程式轉檔囉,以下是 php 的程式碼:

<?php
/*****************************************************
*
* 說明:大量讀取.txt,轉成.xls,針對檔案內容做的轉換
* 以下是部分檔案內容:
* 3:
* 1025579,4,2003-03-29
* 712664,5,2004-02-01
* 1331154,4,2004-07-03
* 2632461,3,2005-07-22
* 44937,5,2004-06-22
* ...
* 如果是別種檔案結構可能會有部份錯誤,見諒!
* 作者:寶尼
*
******************************************************/

// HTML 下載頁面
echo '<div align="center">';
echo '<h2>.txt 大量轉檔 .xls 程式</h2>';
echo '<h4>Author:Bernie (NCUE IM)<br/>2007/12/07</h4>';
echo '<p>Download</p>';

require('loadfile.php');

$i = 0; $flag = 0; $tmp = array(); $value = NULL;
// 讀取檔案
$tmp = openfile('./txt');
foreach($tmp as $data)
{
$tok = explode(".", $data);
$filename = $tok[0];
$filename_orginal = 'txt/'.$filename.'.txt';
$filename_translate = 'xls/'.$filename.'.xls';
$file = @fopen($filename_orginal,"r");
$file_translate = @fopen($filename_translate,"w");

while($buffer = fgets($file, filesize($filename_orginal))){
if($i++ == 0){
$value = $buffer;
}
else{
// 進行轉檔
$tok = explode(",", $buffer);
foreach($tok as $data){
$value .= $data;
if($flag != 2){
$value .= "\t";
$flag++;
}
else if($flag == 2){
$flag = 0;
}
}
}
}

$i = 0;
@fputs($file_translate, $value);
@fclose($file);
@fclose($file_translate);
$value = NULL;

echo '<a href="'.$filename_translate.'"> '.$filename.'</a><br/>';
}
echo '</div>';
?>


目前的方式會讓 /txt 底下的 .txt 檔案一次全部轉完並放到 /xls 底下,產生相同檔名的 .xls 檔案。因為我沒用過微軟另一個免費的大刀 MS SQL Server,所以不確定匯入外部資料的方式,是用那一種,反正只差在匯到資料庫而已,所以我的幫忙到此告一段落。

順便說一下,會知道 \t 在 excel 會放到下一個欄位,以及 \n 會換行是在如何用php將資料寫到Excel中 知道的,雖然是小技巧但是卻很屌,根本沒想到可以這樣互通有無啊,果真學到新的一技呢 :D

沒有留言:

張貼留言