我有需要用php读取的csv文件。我使用了2种方法,但是主题存在问题。
我使用的方法是: 1- file_get_contents 2-fgetcsv 让我们来解释一下csv文件。关于文件的问题是字段包含用于定界符及其麻烦的逗号。 第一种方法很快,但是字段中的逗号使其不能像数字分隔符14,200那样正常工作。我用一个名为固定编号的函数来固定它。但是仍然有包含逗号的随机文本,并且不遵循我可以修复的任何规则 大型csv的第二种方法非常慢,我无法摆脱它的正常工作 第一种方法的代码如下:
$myFile = file_get_contents($file);
$lines = explode("\r\n",$myFile);//file to an array
while($counter <= count($lines)){
$data=$lines[$counter];
$tmp=fixnumbers($data);
$tmp=eregi_replace('"', '',$tmp);
$tmp=explode(',',$tmp);
if(count($tmp)> 0 ){
$newdata[$datacounter]=$tmp;//explode('*0*',$data);
$datacounter++;
}
$counter++;
}
第二种方法在这里:
$handle= fopen($file,"r");
$row=1;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
for ($c=0; $c < $num; $c++) {
$mydata[$row][$c]=$data[$c] . "<br />\n";
}$row++;
}
print "<div class=\"longList\"><pre>";
print_r($mydata);
print "</pre></div>";
fclose($file);
}
答案 0 :(得分:0)
因此,我等待了几分钟下载文件,抓取了前5条记录,并使用了PHP手册中iframe
示例的副本/粘贴。
前5条记录-https://termbin.com/23ti-另存为“ sm_file.csv”
fgetcsv
数据元素36似乎是您遇到的问题,就像您看到<?php
if (($handle = fopen("sm_file.csv", "r")) !== FALSE) {
$data=array();
$num=0;
while (($data[] = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num++;
}
fclose($handle);
print_r($data);
}
?>
[0] => Array
(
[0] => از تاريخ وصل 01/07/1397 - با برنامه
[1] => تاريخ گزارش: 29/09/1397
[2] => شماره گزارش: (3-5)
[3] => صفحه 1
[4] => گزارش قطع و وصل فيدرهاي فشار متوسط (نمونه 3)
[5] => ملاحظات
[6] => شرايط جوي
[7] => عملكرد ريكلوزر
[8] => رله عامل
[9] => خاموشي (MWh)
[10] => بار فيدر (A)
[11] => مدت قطع
[12] => زمان وصل
[13] => تاريخ وصل
[14] => زمان قطع
[15] => تاريخ قطع
[16] => نوع اشكال بوجود آمده
[17] => فيدر فشار متوسط
[18] => پست فوق توزيع
[19] => شماره پرونده
[20] => رديف
[21] => ناحيه اسالم
[22] =>
[23] => آفتابي
[24] => ندارد
[25] => ندارد
[26] => 0.21
[27] => 3
[28] => 132
[29] => 11:30
[30] => 1397/07/04
[31] => 09:18
[32] => 1397/07/04
[33] => جهت كار در حريم شبكه
[34] => گيسوم
[35] => اسا لم
[36] => 96,042,429,972
[37] => 1
[38] => 61292.56
[39] => جمع کل بار فيدر:
[40] => 393.85
[41] => جمع کل خاموشي:
[42] => 92,725
[43] => جمع مدت قطع:
)
可以很好地处理它一样,您只需要在处理数据时将字符串转换为数字即可。只需删除逗号。
fgetcsv
哪个给
<?php
if (($handle = fopen("sm_file.csv", "r")) !== FALSE) {
$data=array();
$num=0;
while (($data[] = fgetcsv($handle, 1000, ",")) !== FALSE) {
$data[(count($data)-1)][36]=str_replace(",","",$data[(count($data)-1)][36]);
}
fclose($handle);
print_r($data);
}
?>
关于耗时多长时间,您的2k条记录的完整文件
[36] => 96042429972
在适度的i5和8GB内存上。没有看到任何问题。