A. 將php生成CSV文件2
發給你的程序里,這個已經做好了。
B. PHP操作CSV文件的問題,請教大家!
給個思路:
1、讀取csv文件,把數據讀到一個數組中(核心function是fgetcsv)
2、操作這個數組來獲取你要的結果
核心思路給你了。具體代碼你自己寫寫看
C. 如何解析包含序列化的PHP的CSV文件
在Unity3D中可以使用使用繼承自scriptObject類並添加CreateAssetMenu屬性方便實現類的序列化,但值得注意的是這種方式並不支持程序打包之後數據的保存。
當然常用的還有xml和json的方式來保存類的信息,在需要的時候載入出來,這方面就不多說了。但是直觀的來說,表最適合一些簡單的數據類型的記錄,鍵值對最簡單。
特別是一個一些程序的配製或者標題對應於一段富文本來說,這樣的信息最適合保存在csv文件中。
狀態模式:(例1)
面對象常的設計模式中,狀態模式比較常用的一種。一個類的某個屬性有多種狀態,而這個類實現通用的方法,在不同的狀態下會產生不同的後果,不同的狀態分別抽象為一個個獨立的類,其內部可以觸發整體狀態的改變。只需要考慮到不同狀態下具體的實現和狀態的轉換,而大大簡化了用戶調用的介面。
CSV文件:(例2)
利用excel,可以進行csv文件的編輯,可以方便的將只包含文字信息的表格導出為csv文件,並且可以進行重復編輯。
程序中要使用csv,先要將其文本文件的格式進行透徹分析。
測試一、 先建立一個簡單的表格如圖所示(沒有引號):
然後利用notepad打開可以看到下面這樣的格式:
id,name,sex
這種情況下,要解析實在是太容易了,要什麼設計模式...
測試二、填寫一些復雜的數據試試(有引號):
notepad打開:
id,name,sex
1,小名:"小藝",girl
這種情況下,貌似也不太復雜,只要用「,」分解不就好了?
測試三、更為復雜的信息:
notepad打開試試:
id,name,sex
1,"小名:""小藝"",大名:""楊彬藝""",girl
這下壞了,直接用,分解是不可能的,特別是對於更為復雜的一大段文字信息。
測試四、段內還有換行呢!
notepad內信息如下:
id,name,sex
1,"小名:""小藝""
大名:""楊彬藝""",girl
真的換行了哦,原來以為可以readline就可以讀取出一組數據的方式也行不通了...
程序介面設計:
要將程序設計為通用易用,不得不遵循介面隔離的原則,盡量簡化類的介面。要實現程序的面對象特性,還要將每個類的功能設計得相對單一,以降低類之前的偶合。
首先設計的最,最外層CsvLoaderManager,這應該是一個單例,方便全局使用並且能使用一些MonoBehaiver的方法,其主要的功能就是載入和保存csv文件。
其次要設計的,ParserCSV,其主要的功能是將csv文本信息轉換為一個二維數組。
然後設計的是一個狀態機ParserStateMachine,讀取遇到的一個字元信息。
public class ParserStateMachine
{
public LineStartState LineStartState;
public ValueStartState ValueStartState;
public ValueState ValueState;
public QuotedValueState QuotedValueState;public QuoteState QuoteState;
private ParserState currState;
public ParserContext context;
public const char CommaCharacter = ',';
public const char QuoteCharacter = '"';
public bool TrimTrailingEmptyLines;
public int MaxColumnsToRead;
public ParserStateMachine(bool TrimTrailingEmptyLines = false,int MaxColumnsToRead = 0){
this.TrimTrailingEmptyLines = TrimTrailingEmptyLines;this.MaxColumnsToRead = MaxColumnsToRead;context = new global::ParserContext();
LineStartState = new LineStartState(this);ValueStartState = new ValueStartState(this);ValueState = new ValueState(this);
QuotedValueState = new QuotedValueState(this);QuoteState = new QuoteState(this);
}
public void SetState(ParserState currState){
this.currState = currState;
}
public void AnyChar(char ch)
{
currState.AnyChar(ch);
}
public void Comma()
{
currState.Comma();
}
public void EndOfLine()
{
currState.EndOfLine();
}
public void Quote()
{
currState.Quote();
}
}
然後是抽象的狀態類ParserState,和具體的LineStartState,ValueStartState,ValueState,QuotedValueState,QuoteState 這五種狀態(分別是換行狀態、值開始狀態、值狀態、引號內值狀態、引號狀態);最後是將二得到的二維數據轉換為具體的類的,因為每個類者有相似的轉換方法,可以寫一個模板類,用編輯器擴展生成一個具體的類並繼承於一個抽象的CSVTable。
以上的狀態模式只適用於數據載入到具體類中,要實現一個將數據轉換為csv信息的方式,並不是簡單的反過來寫就行。
具體實現參見github上的源碼吧
https://github.com/zouhunter/CSVConfig
注意事項:
1、 csv文件利用excel打開之後格式會發生變化,程序中使用時,需要提前將格式轉換為UTF_8.
D. php上傳文件是,判斷是否csv文件的文件類型怎麼寫
$_FILES接收到文件信息是個數組。
其中$_FILES['myFile']['name']客戶端文件的原名稱,
您用『.』來分割$_FILES['myFile']['name']分成一個索引數組,這個數組的最後一個值就是文件的擴展名。
或者你從最後一個「.」位置截取$_FILES['myFile']['name'],截取到最後。得到的結果也是文件的擴展名;
$_FILES['myFile']['type']得到的是文件的 MIME類型,這個並不能很好的反映文件的擴展名,
例如:
MIME類型為「text/html」,這個類型對應.html .htm .stm三種文件擴展名
MIME類型為「text/plain」,對應的是.c .txt .h .bas四種文件擴展名
E. php 生成csv文件並提示保存
<?php
//文件名
$filename="test.csv";
//數據(具體的根據需要做處理,如果是從資料庫查詢,原理與此類似,只需設置好寫入格式和數據即可。
$data="測試csv";
//設置header
header("Content-type:text/csv");
header("Content-Disposition:attachment;filename=".$filename);
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');header('Pragma:public');
echo$data;
?>
F. php 生成 csv文件
$filename="export_".date('Ymd').".csv";
header('Content-Type:application/vnd.ms-excel');
header('Content-Disposition:attachment;filename="'.$filename.'"');
header('Cache-Control:max-age=0');
//寫入你的查詢代碼
$fp=fopen('php://output','a');
$print_hea=array("姓名","年齡","性別");
fputcsv($fp,$print_hea);
//下面是你的查詢結果代碼,把結果循環在數組中後使用
fputcsv($fp,$print_hea_new);
G. php csv文件和excel文件的區別
其實最大的一個區別,PHP中有自帶的csv函數,可以直接拿來使用,而Excel文件需要重新寫入。你這個問題我之前測試過一個大數據,股票數據文件,股票數據文件用csv來保存的,將csv文件的數據直接保存在資料庫里很便捷。而excel文件保存的時候,會出現亂碼的問題,總之,文本文件和二進制文件保存方式是有區別的。建議在項目用csv文件格式進行導入導出數據。
H. php 解析csv 中文
這個一般都是因為編碼問題,你的PHP文件是什麼編碼方式,資料庫的欄位是什麼編碼方式,CSV是什麼編碼方式,MYSQL會話是什麼編碼方式,這些要求統一。
I. php 導出csv時如何設置屬性,合並單元格之類的。。
CSV文件本身就是不帶格式符號的純文字,無法直接在PHP中控制單元格合並這樣的事情,我覺得你可以用html代碼生成execl能直接讀的文檔比較好
$result=mysql_query("select*fromstudentorderbyidasc");
$str="<tr><td>姓名</td><td>性別</td><td>年齡</td></tr>
";
$str=iconv('utf-8','gb2312',$str);
while($row=mysql_fetch_array($result)){
$name=iconv('utf-8','gb2312',$row['name']);
$sex=iconv('utf-8','gb2312',$row['sex']);
//要控制合並啥的,在下邊修改即可
$str.="<tr><td>".$name."</td><td>".$sex."</td><td>".$row['age']."</td></tr>";
}
$filename=date('Ymd').'.xls';
export_xls($filename,$str);
functionexport_xls($filename,$string){
//可以修改樣式,控制字型大小、字體、表格線、對齊方式、表格寬度、單元格padding等,在下邊的<style></style>
$header="<htmlxmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<metahttp-equiv="Content-type"content="text/html;charset=GBK"/>
<style>
td{padding:4px;mso-ignore:padding;color:windowtext;font-size:10.0pt;font-weight:400;font-style:normal;text-decoration:none;font-family:Arial;mso-generic-font-family:auto;mso-font-charset:134;mso-number-format:General;text-align:general;vertical-align:middle;border:.5ptsolidwindowtext;mso-background-source:auto;mso-pattern:auto;mso-protection:lockedvisible;white-space:nowrap;mso-rotate:0;}
</style>
</head><body>
<tablex:strborder=0cellpadding=0cellspacing=0width=100%style="border-collapse:collapse">";
$footer="</table>
</body></html>";
$exportString=$header.$string.$footer;
header("Cache-Control:public");
header("Pragma:public");
header("Content-type:Content-type:application/vnd.ms-excel");
header("Accept-Ranges:bytes");
header("Content-Disposition:attachment;filename=".$filename);
header("Content-length:".strlen($exportString));
echo$exportString;
exit;
}