【问题标题】:Read specifc rows and lines from multiple csv and export to one csv file从多个 csv 读取特定的行和行并导出到一个 csv 文件
【发布时间】:2014-01-24 13:57:40
【问题描述】:

我每周从四个外部来源收到四个 csv 文件。 csv 文件具有相同的设计,但包含不同的数据。我想将所有四个文件中的特定行和行收集到一个 csv 文件中。

以下是如何设计所有四个 csv 文件的示例。我想从所有四个 csv 文件中读取日期、名称和第 5 行和第 6 行,然后将所有这些添加到一个 csv 文件中并设置为第二个示例。

如何做到这一点?在 MS Excel 中作为脚本或使用 PHP 的服务器端? 我一直在寻找解决方案 PHP。但我不确定是否可以使用 PHP?

内容中使用的分隔符(row1、row2、row3 等)是逗号 (,)。带有日期和名称的顶部仅使用冒号 (:)

Date: 24-01-2014                            
Name: source1                           



Row1    Row2    Row3    Row4    Row5    Row6    Row7    Row8    Row9
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221
ad4213  ad4214  ad4215  ad4216  ad4217  ad4218  ad4219  ad4220  ad4221

第二个例子

Row5    Row6    Date    Name
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source1
ad4217  ad4218  24-01-2014  source2
ad4218  ad4218  24-01-2014  source2
ad4219  ad4218  24-01-2014  source2
ad4220  ad4218  24-01-2014  source2
ad4221  ad4218  24-01-2014  source2
ad4222  ad4218  24-01-2014  source2
ad4223  ad4218  24-01-2014  source2
ad4224  ad4218  24-01-2014  source2
ad4225  ad4218  24-01-2014  source2
ad4226  ad4218  24-01-2014  source2
ad4227  ad4218  24-01-2014  source2
ad4228  ad4218  24-01-2014  source2
ad4229  ad4218  24-01-2014  source2
ad4230  ad4218  24-01-2014  source2
ad4231  ad4218  24-01-2014  source2
ad4232  ad4218  24-01-2014  source2
ad4217  ad4218  24-01-2014  source3
ad4218  ad4219  24-01-2014  source3
ad4219  ad4220  24-01-2014  source3
ad4220  ad4221  24-01-2014  source3
ad4221  ad4222  24-01-2014  source3
ad4222  ad4223  24-01-2014  source3
ad4223  ad4224  24-01-2014  source3
ad4224  ad4225  24-01-2014  source3
ad4225  ad4226  24-01-2014  source3
ad4226  ad4227  24-01-2014  source3
ad4227  ad4228  24-01-2014  source3
ad4228  ad4229  24-01-2014  source3
ad4229  ad4230  24-01-2014  source3
ad4230  ad4231  24-01-2014  source3
ad4231  ad4232  24-01-2014  source3
ad4232  ad4233  24-01-2014  source3
ad4217  ad4218  24-01-2014  source4
ad4218  ad4219  24-01-2014  source4
ad4219  ad4220  24-01-2014  source4
ad4220  ad4221  24-01-2014  source4
ad4221  ad4222  24-01-2014  source4
ad4222  ad4223  24-01-2014  source4
ad4223  ad4224  24-01-2014  source4
ad4224  ad4225  24-01-2014  source4
ad4225  ad4226  24-01-2014  source4
ad4226  ad4227  24-01-2014  source4
ad4227  ad4228  24-01-2014  source4
ad4228  ad4229  24-01-2014  source4
ad4229  ad4230  24-01-2014  source4
ad4230  ad4231  24-01-2014  source4
ad4231  ad4232  24-01-2014  source4
ad4232  ad4233  24-01-2014  source4

我希望 Stackoverflow 的某个人知道如何做到这一点。

BR 克里斯蒂安

【问题讨论】:

  • csv文件中的分隔符是逗号还是制表符?在您的示例中,它看起来像一个选项卡,但您可能只是从 Excel 复制和粘贴。
  • 抱歉,缺少有关 csv 文件的详细信息。文件中使用了分隔符:code 日期:24-01-2014 名称:test.csv Row1,Row2,Row3,Row4,Row5,Row6,Row7,Row8,Row9 ad4213,ad4214,ad4215,4216,ad4217 ,d4218,a219,ad4220,ad4221 code

标签: php vba csv


【解决方案1】:
$foo = array( "source1.csv", "source2.csv","source3.csv","source4.csv");  
    $cont=0;
    foreach ($foo as $value) {
        $fh = fopen($value, 'r');
        if(!$fh) die('File no good!');

        $i=0;$j=0;
        while (!feof($fh )){
            $campo = fgetcsv($fh,4096,";");

            if($i < 2)
                $dataandsource[$cont][$i]=$campo[1];
            elseif($campo[5] != '' && $campo[6]!= ''){
                $rowfive[$cont][$j]=$campo[4];
                $rowsix[$cont][$j]=$campo[5];
                $j++;
            }
            $i++;
        }
        unset($rowfive[$cont][0]); //first row is 'row5'
        unset($rowsix[$cont][0]);  //first row is 'row6'
    $cont++;
    }
    for($x=0;$x< count($foo);$x++)
    {
        for($y=0;$y <= count($rowfive[$x]);$y++)
        {
            if($x==0 && $y ==0)
                echo "row5  row6  Date    Source<br>";
            else{
                if($rowfive[$x][$y] != '' )
                echo $rowfive[$x][$y].";".$rowsix[$x][$y].";".$dataandsource[$x][0].";".$dataandsource[$x][1]."<br>";
            }

        }
    }

我用 4 个 csv 文件制作了这段代码,其中包含以下信息:

Date;24/01/2014;;;;;;;
Name;source1;;;;;;;



Row1;   Row2;   Row3;Row4;  Row5;Row6;Row7;Row8;Row9
ad4213;ad4214;ad4215;ad4216;ad4215;ad4218;ad4219;ad4220;ad4221
ad4213;ad4214;ad4215;ad4216;ad4217;ad4218;ad4219;ad4220;ad4221
ad4213;ad4214;ad4215;ad4216;ad4217;ad4218;ad4219;ad4220;ad4221
ad4213;ad4214;ad4215;ad4216;ad4217;ad4218;ad4219;ad4220;ad4221
ad4213;ad4214;ad4215;ad4216;ad4217;ad4218;ad4219;ad4220;ad4221
ad4213;ad4214;ad4215;ad4216;ad4217;ad4218;ad4219;ad4220;ad4221
ad4213;ad4214;ad4215;ad4216;ad4217;ad4218;ad4219;ad4220;ad4221
ad4213;ad4214;ad4215;ad4216;ad4217;ad4218;ad4219;ad4220;ad4221
ad4213;ad4214;ad4215;ad4216;ad4215;ad4218;test6;ad4220;ad4221

结果如你所愿:

row5 row6 Date Source
ad4215;ad4218;24/01/2014;source1
ad4217;ad4218;24/01/2014;source1
ad4217;ad4218;24/01/2014;source1
ad4217;ad4218;24/01/2014;source1
ad4217;ad4218;24/01/2014;source1
ad4217;ad4218;24/01/2014;source1
ad4217;ad4218;24/01/2014;source1
ad4217;ad4218;24/01/2014;source1
ad4215;ad4218;24/01/2014;source1
ad4213;ad4221;24/01/2014;source2
ad4213;ad4221;24/01/2014;source2
ad4213;ad4221;24/01/2014;source2
ad4213;ad4221;24/01/2014;source2
ad4213;ad4221;24/01/2014;source2
ad4213;ad4221;24/01/2014;source2
ad4213;ad4221;24/01/2014;source2
ad4213;ad4221;24/01/2014;source2
ad4213;ad4221;24/01/2014;source2
ad5555;test6i;24/01/2014;source3
ad5555;test6i;24/01/2014;source3
etc...

【讨论】:

  • 这简直太棒了。我认为这样做的原因是前五行是文本或只是空格标题(row1,row2 等)从第 6 行开始。很抱歉缺少有关 csv 文件的详细信息。文件中使用了分隔符:文件顶部“日期:24-01-2014 名称:test.csv”内容“Row1,Row2,Row3,Row4,Row5,Row6,Row7,Row8,Row9 ad4213,ad4214, ad4215,4216,ad4217,d4218,a219,ad4220,ad4221 "
  • 经过一些小的调整后,我让它工作,所以它可以读取两个分隔符。非常感谢您的工作! BR克里斯蒂安
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-22
相关资源
最近更新 更多