标签: fgetcsv

从 CSV 文件中删除行

我有 4 列的 .csv 文件。删除与第一列的 id 相同的行的最简单方法是什么?这是我卡住的地方:

if($_GET['id']) {
    $id = $_GET['id'];
    $file_handle = fopen("testimonials.csv", "rw");

    while (!feof($file_handle) ) {
        $line_of_text = fgetcsv($file_handle, 1024);    
        if ($id == $line_of_text[0]) {
            // remove row
        }
    }
    fclose($file_handle);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,数据库不是一种选择。

php csv fopen fgetcsv

8
推荐指数
2
解决办法
3万
查看次数

如何让PHP的fgetcsv()识别经典Mac(CR)新行字符?

我使用此代码从CSV文件中获取列数:

$this->dummy_file_handler = fopen($this->config['file'],'r');
if ($dataset =fgetcsv($this->dummy_file_handler))
{
    $this->number_of_columns = count($dataset);
}
Run Code Online (Sandbox Code Playgroud)

它工作正常除非文件是使用Excel for Mac 2011导出的,因为新行字符是 经典Mac(CR),fgetcsv它无法识别.

替代文字

如果我手动将换行符从Classic Mac(CR)更改为Unix(LR),那么它可以工作,但我需要将其自动化.

如何fgetcsv识别经典Mac(CR)新行字符?

php newline fgetcsv

8
推荐指数
1
解决办法
4370
查看次数

将CSV转换为数组

我有这个数组与机场代码和城市名称(约3500行).

code,city
"Abilene, TX ",ABI
"Adak Island, AK ",ADK
"Akiachak, AK ",KKI
"Akiak, AK ",AKI
"Akron/Canton, OH ",CAK
"Akuton, AK ",KQA
"Alakanuk, AK ",AUK
"Alamogordo, NM ",ALM
Run Code Online (Sandbox Code Playgroud)

我需要将该文件转换为php数组.到目前为止这是我的代码:

if(($handle = fopen('test.csv', 'r')) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ',', '"')) !== FALSE) {
        echo '<pre>';
            print_r($data);
            echo '</pre>';
    }
    fclose($handle);
}
Run Code Online (Sandbox Code Playgroud)

虽然我正在设置fgetcsv函数的分隔符和封闭字符,但是我得到了这个结果:

Array
(
    [0] => code
    [1] => city
"Abilene
    [2] => TX "
    [3] => ABI
"Adak Island
    [4] => AK "
    [5] => ADK
"Akiachak …
Run Code Online (Sandbox Code Playgroud)

php csv arrays fgetcsv

8
推荐指数
1
解决办法
2万
查看次数

读取csv文件的最快方法

我正在寻找一种非常快速的方法来读取csv文件.我的数据结构如下所示:

timestamp ,float     , string    ,ip          ,string
1318190061,1640851625, lore ipsum,84.169.42.48,appname
Run Code Online (Sandbox Code Playgroud)

我正在使用fgetcsv将这些数据读入数组.

问题:表现.脚本必须定期读取(和处理)超过10,000个条目.

我的第一次尝试非常简单:

//Performance: 0,141 seconds / 13.5 MB

while(!feof($statisticsfile)) 
    {
    $temp = fgetcsv($statisticsfile);
    $timestamp[] = $temp[0];
    $value[] = $temp[1];
    $text[] = $temp[2];
    $ip[] = $temp[3];
    $app[] = $temp[4];
    }
Run Code Online (Sandbox Code Playgroud)

我的第二次尝试:

//Performance: 0,125 seconds / 10.8 MB

while (($userinfo = fgetcsv($statisticsfile)) !== FALSE) {
   list ($timestamp[], $value[], $text, $ip, $app) = $userinfo;
}
Run Code Online (Sandbox Code Playgroud)
  1. 有没有办法进一步提高性能,还是我的方法尽可能快?
  2. 可能更重要的是:有没有办法定义读取哪些列,例如有时只需要时间戳,浮点列.有没有比更好的方式(看看我的第二次尝试:)

谢谢 :)

php csv performance fgetcsv

7
推荐指数
1
解决办法
7672
查看次数

读取大文件时出现内存不足错误

我有一个大的csv,我想解析并插入到我的数据库中.我有这个PHP:

$target = '../uploads/'.$f;
$handle = fopen($target, "r");
$data = fgetcsv($handle, 0, ",");

$rows = array();

while ($data !== FALSE) {
    $rows[] =  $data;
}

fclose($handle);

if (count($rows)) {
             foreach ($rows as $key => $value) {

                  echo $value;

              }
          }
Run Code Online (Sandbox Code Playgroud)

每次我尝试运行我的脚本时都会收到此错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 35 bytes)
Run Code Online (Sandbox Code Playgroud)

任何想法如何做到这一点?

php csv error-handling loops fgetcsv

7
推荐指数
3
解决办法
6834
查看次数

使用curl替代fgetcsv的fopen文件资源

是否可以进行curl,访问URL和结果作为文件资源?喜欢fopen怎么做.

我的目标:

  1. 解析CSV文件
  2. 将它传递给fgetcsv

我的阻挠:fopen被禁用了

我的一大堆代码(fopen)

$url = "http://download.finance.yahoo.com/d/quotes.csv?s=USDEUR=X&f=sl1d1t1n&e=.csv";
$f = fopen($url, 'r');
print_r(fgetcsv($f));
Run Code Online (Sandbox Code Playgroud)

然后,我正在尝试卷曲.

$curl = curl_init();
curl_setopt($curl, CURLOPT_VERBOSE, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
curl_setopt($curl, CURLOPT_URL, $url);
$content = @curl_exec($curl);
curl_close($curl);
Run Code Online (Sandbox Code Playgroud)

但是,像往常一样.$ content已经返回一个字符串.

现在,curl有可能将其作为文件资源指针返回吗?就像fopen一样?使用PHP <5.1.x的东西.我的意思是,不使用str_getcsv,因为它只有5.3.

我的错误

警告:fgetcsv()期望参数1是资源,给定布尔值

谢谢

php fopen curl fgetcsv

7
推荐指数
1
解决办法
7981
查看次数

从导入的.csv文件中删除BOM()

我想从导入的文件中删除BOM,但它似乎不起作用.

我试着preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $file);和一个str_replace.

我希望有人看到我做错了什么.

$filepath = get_bloginfo('template_directory')."/testing.csv";
            setlocale(LC_ALL, 'nl_NL');
            ini_set('auto_detect_line_endings',TRUE);
            $file = fopen($filepath, "r") or die("Error opening file");
            $i = 0;
            while(($line = fgetcsv($file, 1000, ";")) !== FALSE) {
                if($i == 0) {
                    $c = 0;
                    foreach($line as $col) {
                        $cols[$c] = utf8_encode($col);
                        $c++;
                    }
                } else if($i > 0) {
                    $c = 0;
                    foreach($line as $col) {
                        $data[$i][$cols[$c]] = utf8_encode($col);
                        $c++;
                    }
                }
                $i++;
            }
Run Code Online (Sandbox Code Playgroud)

-----------已
解决的版本:

setlocale(LC_ALL, 'nl_NL');
ini_set('auto_detect_line_endings',TRUE);
require_once(ABSPATH.'wp-admin/includes/file.php' );

$path = get_home_path();        
$filepath …
Run Code Online (Sandbox Code Playgroud)

php csv import fgetcsv

7
推荐指数
4
解决办法
8830
查看次数

fGetCsv只读第一行?

我正在尝试使用fgetCsv但由于某种原因它只是读取第一行.这是代码:

$fieldseparator = ",";
$lineseparator = "\r";


if(!file_exists($csvFile)) {
    echo "<div id='error'>Cannot find uploaded file. Please try again</div>";
    exit;
}

$file = fopen($csvFile,"r");

if(!$file) {
    echo "<div id='error'>Error loading CSV file</div>";
    exit;
}

$size = filesize($csvFile);
if(!$size) {
    echo "<div id='warning'>File is empty</div>";
    exit;
}

$query = "";
$content = fgetcsv($file,$size,$lineseparator);


fclose($file);

foreach($content as $data) {
        $values = explode($fieldseparator,$data);
        $query[$i] = "('".implode("','",$values)."')";
}
Run Code Online (Sandbox Code Playgroud)

这只输出一行.这是CSV文件:

TSE-P01,1,WO47653897,RM,EcoQuiet,1
TSE-P02,1,WO47653898,RM,EcoQuiet,1
TSE-P03,1,WO47653899,RM,EcoQuiet,1
TSE-P04,1,WO47653900,RM,EcoQuiet,1
TSE-P05,1,WO47653901,RM,EcoQuiet,1
TSE-P06,1,WO47653902,RM,EcoQuiet,1
TSE-P07,1,WO47653903,RM,EcoQuiet,1
TSE-P08,1,WO47653904,RM,EcoQuiet,1
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?

php csv fgetcsv

6
推荐指数
2
解决办法
9454
查看次数

fgetcsv():第一行作为键

我正在构建一个简单的商店系统,它从csv文件生成的数组中获取其产品.

我的csv如下:

pid;name;color
11149;Miro;"schwarz;weiß;blau;rot;gelb"
11004;FritzHansen;"buche;nussbau;schwarz;weiß;blau;hellblau;rot;grün;gelb;retro"
Run Code Online (Sandbox Code Playgroud)

我正在使用以下脚本

if (($handle = fopen('_products.csv', 'r')) === false) {
    die('Error opening file');
}

$headers = fgetcsv($handle, 256, ';');
$_products = array();

while ($row = fgetcsv($handle, 256, ';')) {
    $_products[] = array_combine($headers, $row);
}
fclose($handle);
Run Code Online (Sandbox Code Playgroud)

产生这个数组:

Array
(
    [0] => Array
        (
            [pid] => 11149
            [name] => Miro
            [color] => schwarz;weiß;blau;rot;gelb
        )

    [1] => Array
        (
            [pid] => 14215
            [name] => 1800
            [color] => schwarz;anthrazit
        )

    [2] => Array
        (
            [pid] => 11004
            [name] => FritzHansen …
Run Code Online (Sandbox Code Playgroud)

php multidimensional-array fgetcsv

6
推荐指数
1
解决办法
6811
查看次数

从目录中读取*.csv文件并显示每个文件的内容失败

我需要帮助阅读文件夹和打开/输出csv数据,我已经使用了其他人写的例子,但没有一个对我有用.

我目前拥有的是这个,但它不输出文件:

$files = scandir($PathToCreate.$version."/"); //scan the folder
foreach($files as $file) { //for each file in the folder

//The following is another example I found but does not output anything I just need to open each file and be able to output / target specific data

$csv = array();
$lines = file($file, FILE_IGNORE_NEW_LINES);

foreach ($lines as $key => $value)
{
    $csv[$key] = str_getcsv($value);
} 
print_r($csv)

}
Run Code Online (Sandbox Code Playgroud)

php csv scandir fgetcsv opencsv

6
推荐指数
1
解决办法
6728
查看次数