回答
从PHP 5.3开始,您可以使用str_getcsv()来阅读使用不同分隔符的单独行。
$someCondition = someConditionToDetermineTabOrComma();
$delimiter = $someCondition ? "," : "\t";
$fp = fopen('mydata.csv', 'r');
while (!feof($fp))
{
$line = fgets($fp, 2048);
$data = str_getcsv($line, $delimiter);
doSomethingWithData($data);
}
fclose($fp);
读取整个文件,或逐行读取并使用拆分进行分割。
在那里你可以包含任意分隔符的正则表达式。我没有PHP在这里测试一个声明,但php.net - >搜索split()。 你还有一个关于正则表达式的评论。
但这种方法将消除getcsv的外壳的功能,有可能击败所有的目的,但最简单的CSV文件。 – dimo414 2009-09-03 09:01:10
您可以指定fgetcsv分隔符()。这是阅读制表符分隔文件的一个例子,
while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) {
...
}
是的,但它也可以是csv文件。问题是如何确定它是否是csv或tab delemited。 – veli 2009-09-03 10:30:04
这里是会读mydata.txt
CSV字段
$tab = "\t";
$fp = fopen('mydata.txt', 'r');
while (!feof($fp))
{
$line = fgets($fp, 2048);
$data_txt = str_getcsv($line, $tab);
//Get First Line of Data over here
print_r($data_txt);
exit;
}
fclose($fp);
这是一个不错的。 – 2016-10-24 18:18:50
这里是我加入到我的事业库以备将来使用功能的例子。我从NSSec's answer得出它。
该解决方案允许您指定是否要将第一行用作数组的键。我可能会添加传递数组以用于$ first_line_keys参数的键的功能。
/**
* Converts a CSV file into an array
* NOTE: file does NOT have to have .csv extension
*
* $file - path to file to convert (string)
* $delimiter - field delimiter (string)
* $first_line_keys - use first line as array keys (bool)
* $line_lenght - set length to retrieve for each line (int)
*/
public static function CSVToArray($file, $delimiter = ',', $first_line_keys = true, $line_length = 2048){
// file doesn't exist
if(!file_exists($file)){
return false;
}
// open file
$fp = fopen($file, 'r');
// add each line to array
$csv_array = array();
while(!feof($fp)){
// get current line
$line = fgets($fp, $line_length);
// line to array
$data = str_getcsv($line, $delimiter);
// keys/data count mismatch
if(isset($keys) && count($keys) != count($data)){
// skip to next line
continue;
// first line, first line should be keys
}else if($first_line_keys && !isset($keys)){
// use line data for keys
$keys = $data;
// first line used as keys
}else if($first_line_keys){
// add as associative array
$csv_array[] = array_combine($keys, $data);
// first line NOT used for keys
}else{
// add as numeric array
$csv_array[] = $data;
}
}
// close file
fclose($fp);
// nothing found
if(!$csv_array){
return array();
}
// return csv array
return $csv_array;
} // CSVToArray()
$filePath = "somefile.txt";
$delimiter = "\t";
$file = new \SplFileObject($filePath);
while (!$file->eof()) {
$line = $file->fgetcsv($delimiter);
print_r($line);
}
请为您的答案添加一些解释,以使其对其他用户更有价值。 – wmk 2017-02-02 19:39:08
- 1. 使用php从文本文件中读取逗号分隔值
- 2. 从逗号分隔的数据文件中读取列C++
- 3. C#阅读从逗号分隔文本文件到Windows窗体
- 4. 制表符分隔或逗号分隔输出中的新行
- 5. 读取存储在csv文件中的rgb值,用逗号分隔符分隔
- 6. Qt读取制表符分隔文本文件的特定列
- 7. 需要脚本来将逗号分隔文件转换为制表符分隔
- 8. 如何从冒号(:)读取C#中的分隔文本文件
- 9. 制表符分隔为逗号UNIX中的分隔文件 - 一个班轮?
- 10. 读取文件包含在Python列表和逗号分隔
- 11. 逗号和制表符分隔的tsv文件
- 12. BULK INSERT制表符分隔的文件 - 用逗号描述
- 13. SAS从包含制表符和逗号分隔符的文件中读取数据
- 14. 将逗号分隔的文件读取到整数数组中
- 15. 在python中读取逗号分隔的ini文件?
- 16. 如何从文本文件中将逗号分隔的双精度读入MATLAB?
- 17. 阅读逗号分隔文本文件到数组
- 18. Python - 读取由分号分隔的文本文件,使用openpyxl绘制图表
- 19. 用逗号分隔多个逗号分隔的csv文件
- 20. 在动态ax中读取逗号分隔值(csv)文件
- 21. 如何在bash中用逗号分隔整数读取文件
- 22. 逗号或分号分隔的自动完成文本框
- 23. 从字符串中读取多个逗号分隔的双打
- 24. 以逗号分隔的列表中的分隔符和自由文本字段
- 25. 将excel表单转换成逗号分隔的文本文件
- 26. 阅读由换行符和逗号分隔的txt文件
- 27. 如何读取以逗号分隔的.txt文件?
- 28. 如何读取C中制表符分隔整数的文本文件?
- 29. 从制表符分隔的文本文件列制作数组
- 30. 制表符分隔符到逗号分隔符传输问题
我来到了类似的解决方案。我阅读文件并在其中搜索标签;如果没有找到,我认为分隔符是逗号。然后使用getscv作为php的版本是5.2。虽然我看到这方面存在一些缺陷,但我想不出更好的办法。 – veli 2009-09-03 09:53:03
也许在第一行计算制表符和逗号(以及其他潜在分隔符),然后将它们与第二行进行比较等等。无论哪一个最一致的是你可能的分隔符。不幸的是,这是一种双通的解决方案,但是当你有这样一个未知的时候,这往往是这样的。 – Rikki 2013-07-13 17:44:10