我想知道是否有可能從CSV中讀取特定值指定了行號和列號。如何使用PHP從CSV中的'x'行和'y'列讀取CSV值?
假設我想讀取行號爲44
的數據和列號K
?
我不想通過完整的CSV解析。如何閱讀具體數據?
希望我清楚我的問題?任何答案將不勝感激。
我想知道是否有可能從CSV中讀取特定值指定了行號和列號。如何使用PHP從CSV中的'x'行和'y'列讀取CSV值?
假設我想讀取行號爲44
的數據和列號K
?
我不想通過完整的CSV解析。如何閱讀具體數據?
希望我清楚我的問題?任何答案將不勝感激。
CSV文件沒有索引,所以你需要至少去44線和檢索:
$file = new SplFileObject($path);
$file->setFlags(SplFileObject::READ_CSV);
$single = new LimitIterator($file, $offset = 43, $limit = 1);
list($row) = iterator_to_array($single, false);
$k = 10;
echo $row[$k];
不知何故我正面臨這個錯誤。 可捕獲的致命錯誤:傳遞給LimitIterator :: __ construct()的參數1必須實現接口迭代器,在第4行中給出的F:\ Source - WebAutomation \ reuters \ test.php中的整數 – user1518659
謝謝。假設我想要第59行也應該__construt'LimitIterator'再次與不同的抵消? – user1518659
不,然後我會首先在'NoRewindIterator'中包裝'$ file',然後在43偏移,然後在15偏移,以便從44行移動到59.這樣做時可能會遇到不希望的副作用(錯誤行,例如再次從頭開始),如果是這樣,詳情請參閱http://stackoverflow.com/a/13828745/367456(但您可能不會)。 – hakre
Here is a function that accepts the path to a CSV file, and inserts all records to the given MySQL table, paying attention to the column names:
<?php
function csv_file_to_mysql_table($source_file, $target_table, $max_line_length=10000) {
if (($handle = fopen("$source_file", "r")) !== FALSE) {
$columns = fgetcsv($handle, $max_line_length, ",");
foreach ($columns as &$column) {
$column = str_replace(".","",$column);
}
$insert_query_prefix = "INSERT INTO $target_table (".join(",",$columns).")\nVALUES";
while (($data = fgetcsv($handle, $max_line_length, ",")) !== FALSE) {
while (count($data)<count($columns))
array_push($data, NULL);
$query = "$insert_query_prefix (".join(",",quote_all_array($data)).");";
mysql_query($query);
}
fclose($handle);
}
}
function quote_all_array($values) {
foreach ($values as $key=>$value)
if (is_array($value))
$values[$key] = quote_all_array($value);
else
$values[$key] = quote_all($value);
return $values;
}
function quote_all($value) {
if (is_null($value))
return "NULL";
$value = "'" . mysql_real_escape_string($value) . "'";
return $value;
}
?>
這個模糊的答案究竟意味着什麼?我只想讀取'x'行和'y'列的數據。你的答案是否相關? – user1518659
你的問題不缺多少清晰的。但它迄今爲止所做的代碼缺乏。這個調查。 – hakre
我已經完成了從CSV讀取的代碼。但是我所有的研究都將我引導到從CSV逐行解析直到我們到達這一點。我正在尋找一種方法,您只需簡單地讀取一次所需的數據。 – user1518659
您不能,CSV文件沒有索引,所以您可以移動到文件中您要分析的行開始的二進制位置。但是,如果您使用'SplFileObject',則您可以從緩衝讀取中受益。 – hakre