【问题标题】:How to explode a string using preg_match_all如何使用 preg_match_all 分解字符串
【发布时间】:2014-05-26 05:28:33
【问题描述】:

我有一个平面文件。我想将其转换为 csv。 平面文件格式为

"XXX" "H345" 2 "S" 1 "*" 0 01/03/2001 31/03/2002 "WORK IN PROGRESS" "" "" "" ""

这里的字段用空格分隔。

我按照以下步骤进行转换

$file1="job.txt";
$file2="job.csv";
$content=file_get_contents($file1);
$arr=explode("\n",$content);
$f=fopen($file2,'w');   
foreach($arr as $value)
{
  $linearr=explode(' ',$value);
  fputcsv($f, $linearr);            

}

这里的问题是它还将“正在进行的工作”分解为三个不同的领域。 这个怎么解决??如果我使用 preg_match_all 而不是这种情况下如何制作正则表达式??

【问题讨论】:

标签: php


【解决方案1】:

您的格式几乎是 CSV,因此您可以使用 CSV 函数,例如 str_getcsv

$string = '"XXX" "H345" 2 "S" 1 "*" 0 01/03/2001 31/03/2002 "WORK IN PROGRESS" "" "" "" ""';
                          // v -- there is space
print_r(str_getcsv($string, ' ')); // < -- you should use it
                          // ^ -- it's your custom delimiter
//Array
//(
//    [0] => XXX
//    [1] => H345
//    [2] => 2
//    [3] => S
//    [4] => 1
//    [5] => *
//    [6] => 0
//    [7] => 01/03/2001
//    [8] => 31/03/2002
//    [9] => WORK IN PROGRESS
//    [10] => 
//    [11] => 
//    [12] => 
//    [13] => 
//)

fgetcsv

【讨论】:

  • 我尝试过使用 $a=str_getcsv($value);fputcsv($f, $a);但是这里将一行放在一个单元格中
  • @user3675101,你仔细阅读我的例子了吗?你看到str_getcsv的最后一个参数了吗?
猜你喜欢
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
相关资源
最近更新 更多