2014-01-21 104 views
0

这一定相对容易,但我正在努力寻找解决方案。我使用加密的专有网络协议接收数据,最终收到的所有内容都以变量形式结束。内容实际上是一个CSV文件的内容 - 我需要解析这些数据。解析CSV内容

如果这是磁盘上的常规文件,我可以使用fgetcsv;如果我能以某种方式将内容分解成单个记录,那么我可以使用str_getcsv - 但是如何将此文件分解为记录?简单的阅读直到换行不起作用,因为CSV可以包含换行符的值。以下是一组示例数据:

ID,SLN,Name,Address,Contract no 
123,102,Market 1a,"Main street, Watertown, MA, 02471",16 
125,97,Sinthetics,"Another address, 
Line 2 
City, NY 10001",16 
167,105,"Progress, ahead",,18 

所有这些数据都保存在一个变量中 - 我需要解析它。

当然,我总是可以将这些数据写入磁盘上的临时文件中,使用fgetcsv进行读取/解析,但是对我来说这似乎效率极低。

+0

[这里](http://stackoverflow.com/questions/11337221/codeigniter-rest- csv-import-to-mysql/11339125#11339125)就是答案。使用这个库 –

+0

@raheelshan你看过这个问题吗?该“库”从文件读取 - 我没有一个文件。如果我有一个文件,我不会问这个问题,我知道如何从文件中读取CSV数据。 –

回答

0

如果fgetcsv为你工作,考虑一下:

file_put_contents("php://temp",$your_data_here); 
$stream = fopen("php://temp","r"); 
// $result = fgetcsv($stream); ... 

更多关于php://temp,看the php:// wrapper

+0

这是完美的!谢谢!一个问题:如果我第二次在'php:// temp'中执行'file_put_contents',它会覆盖之前写入的内容吗? –

+0

它应该这样做,是的。我自己实际上并没有使用'php:// temp',但我想它会起作用,就好像你使用的是一个名为'php_temp'的文件 - 你可以读,写,追加,覆盖... –

+0

这很棒, 谢谢! –