如何使用fgetcsv()重置文件指针?
我有下面的循环,嵌套在另一个while循环中.然而,它开始从断点而不是第一次运行后的开头读取CSV.
while($line2 = fgetcsv($fp2, $length2, $fildDelineate2)) {
        if($line[0] == $line2[0]) {
            $desc = addslashes(strip_tags($line2[6]));
            $import2 = "insert into $table2 values('$id','1',\"$line[1]\",'$desc','','0')";
            mysql_query($import2) or die('import2 '.mysql_error());
            $count++;
            break;
        }
}
我是新来的PHP,并希望能在其中有两列csv文件阅读,一个是数字(有点像一个ID),那么其他持有整数值.我查找了fgetcsv函数,但是我找不到从csv文件中读取特定列的方法.
我想从第二列获得所有值,没有标题.
这样做的任何方式?
这是我到目前为止:
$file = fopen('data.csv', 'r');
$line = fgetcsv($file);
这是来自csv文件的一些示例数据:
ID,Value
1,243.00
2,243.00
3,243.00
4,243.00
5,123.11
6,243.00
7,180.00
8,55.00
9,243.00
任何帮助,将不胜感激.
谢谢.
关于fgetcsv()文档,函数内部有一些参数fgetcsv():句柄,长度,分隔符,外壳和转义.
现在,我有两个问题:
因此索引从0到4.但是每当我想从索引4获取日期时,返回一个空值.除非我在它之后放一个逗号(通过在它之后填充一个额外的列,使得内容如下:1,2,3,4,5,6).我该如何解决这个问题?由于在csv文件的每一行中的最后一项之后缺少逗号,似乎存在一些问题!
我有一个上传的csv文件,我需要确定csv文件中有多少条目,并将第一列,中间列和最后一列格式化为带有$ header => $ value对的关联数组.我有代码将整个csv格式化为数组
function csv_to_array($filename='', $delimiter=',') {
   if(!file_exists($filename) || !is_readable($filename)){
      return FALSE;
    }
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE) {
    while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE) {
        if(!$header) {
            $header = $row;
        }else{
            $data[] = array_combine($header, $row);
        }
    }
    fclose($handle);
}
  return $data;
}
但是我确定了这样做的方法.任何帮助,将不胜感激.我认为有一件事可能是使用上面的这个函数来获取数组,然后编写一些其他函数来获取此数组的开始中间和结尾并转储其余部分(但仍然需要知道如何执行它至于确定开始的中间和结束
我试图从平均大小的CSV(10 MB),标题和第一行读取两行.我将PHP的内存限制设置为64 MB.然而,在第二次调用fgetcsv()时,我得到了内存耗尽错误.
我删除了脚本的每个不必要的部分进行调试,并逐步跟踪内存使用情况,我仍然无法弄明白.第一次调用后,内存使用率低于1 MB,但在第二次调用时,发生内存耗尽错误.
这是代码:
<?php
function trace($msg) {
    echo "<br>" . date("Y-m-d H:i:s") . " - " . memory_get_usage() . " bytes - {$msg}";
}
ini_set('display_errors', 'on');
error_reporting(E_ALL);
ob_implicit_flush(true);
trace("CSV Memory Limit test");
$path = "../data/uploaded/1405712684_base_leitores_july2014.csv";
trace("path = {$path}");
$fp = fopen($path, "r");
trace("file pointer opened");
trace("getting header...");
$header = fgetcsv($fp, 1024);
trace("header fetched");
var_dump($header);
trace("header displayed");
trace("fetching another line");
$l1 = fgetcsv($fp, 1024);
trace("line fetched");
var_dump($header);
trace("line displayed");
这是输出:
2014-07-18 16:06:26 - 249544 bytes - CSV Memory …我有一个代码.在localhost上我没有读取csv文件(使用Unicode字符)的问题.但当主机输出上传代码什么都没有.为什么?什么是解决方案?
while (($data=fgetcsv($fin,5000,","))!==FALSE) 
{
 var_dump($data[0]);  //on host output is `string(0) ""` but on local i can see output
 var_dump($data[1]);  //$data[1] is integer and  i can see output
}
我有php fgetcsv()方法的问题.我只能得到值"1"而不是每行的数组.这是代码:
$row = 0;
$teststring='';
$handle = fopen($savepath,'r');
if($handle!==FALSE){
    while(($data = fgetcsv($handle,2000,'|')!==FALSE)){        //I am using '|' as the delimiter
        echo (string)$data;
        if($row!=0){
            foreach($data as $d){
                array_push($result['added'],$d);
            }
        }
        $row++;
    }
    fclose($handle);
}
我测试了一个3行的csv文件,结果将是"111".当然,数组$ result ['added']没有值.任何人都可以知道发生了什么吗?谢谢.
我的CSV文件中有以下行
,1,193,23 Video,,"Slotsgade 2, 2.th",,,,,,Copenhagen N,,DK-2200,Denmark,,,,,,,,
,,,Europe,+45 31450980,,info@23company.com,www.23video.com,,,,,,,,Cabsat Online
 Video Industry Sourcebook 12,Mr.,Kristoffer,,Schou,,M,,,,,,,,,,,,,,,,,,,,,,,,,
,,,schou@23company.com,,,,,,,
如你看到的
"Slotsgade 2, 2.th"
中间有一个逗号,现在我preg_split用来爆炸列中的行.
任何人都可以建议我在双引号之间跳过逗号的正则表达式
我已经尝试过了:
/,|".*(?=")/      
我可以使用什么正则表达式preg_split来正确获取数据?
使用fgetcsv,我可以以某种方式做一个破坏性的读取,我读取和处理的行将被丢弃,所以如果我不通过第一遍的整个文件,我可以回来拿起我之前离开的地方the script timed out?
额外细节:
我从一个200mb .gz文件的供应商处获得每日产品.当我解压缩文件时,它变成1.5gb .csv,有近500,000行和20-25个字段.我需要将这些信息读入MySQL数据库,理想情况下是使用PHP,因此我可以安排CRON每天在我的网络托管服务提供商处运行脚本.
服务器上的硬超时由主机提供商设置为180秒,并且任何单个脚本的最大内存利用率限制为128mb.这些限制不能由我改变.
我的想法是使用fgetcsv函数从.csv中获取信息,但由于3分钟的超时,我期望必须在文件中进行多次传递,我当时认为删除文件会很好因为我处理它所以我不需要花费周期跳过已经在前一遍中处理过的行.
执行此示例的csv导入时遇到反斜杠(\“)问题。
这是我从csv输入的2行
“ Travel_and_Work_en.pdf”,840722,3 / 22/2007 10:57 AM,10/10/2007 12:00 AM,10/10/2007 9:00 AM,“。pdf”,“ e:\”
“ ._。Trashes”,4096,10 / 12/2010 4:55 PM,12/8/2014 12:00 AM,11/13/2014 3:00 AM,“。Trashes”,“ e:\”
有了这段代码,我得到的输出(编辑数组)如下所示,
while (($csv_data = fgetcsv($handle, 0, ',')) !== FALSE) {
    print_r($csv_data );
}
输出量
Array (
    [filename] => Travel_and_Work_en.pdf
    [file_size] => 840722
    [modified] => 3/22/2007 10:57 AM
    [accessed] => 10/10/2007 12:00 AM
    [created] => 10/10/2007 9:00 AM
    [extension] => .pdf
    [full_path] => e:\" ._.Trashes"
}
这里的问题是,第二行的第一个字段与第一行的最后一个字段合并,我认为是因为\"最后,如何解决此问题?