2012-12-17 60 views
1

我想知道是否有可能從CSV中讀取特定值指定了行號和列號。如何使用PHP從CSV中的'x'行和'y'列讀取CSV值?

假設我想讀取行號爲44的數據和列號K

我不想通過完整的CSV解析。如何閱讀具體數據?

希望我清楚我的問題?任何答案將不勝感激。

+0

你的問題不缺多少清晰的。但它迄今爲止所做的代碼缺乏。這個調查。 – hakre

+0

我已經完成了從CSV讀取的代碼。但是我所有的研究都將我引導到從CSV逐行解析直到我們到達這一點。我正在尋找一種方法,您只需簡單地讀取一次所需的數據。 – user1518659

+0

您不能,CSV文件沒有索引,所以您可以移動到文件中您要分析的行開始的二進制位置。但是,如果您使用'SplFileObject',則您可以從緩衝讀取中受益。 – hakre

回答

2

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]; 
+0

不知何故我正面臨這個錯誤。 可捕獲的致命錯誤:傳遞給LimitIterator :: __ construct()的參數1必須實現接口迭代器,在第4行中給出的F:\ Source - WebAutomation \ reuters \ test.php中的整數 – user1518659

+0

謝謝。假設我想要第59行也應該__construt'LimitIterator'再次與不同的抵消? – user1518659

+0

不,然後我會首先在'NoRewindIterator'中包裝'$ file',然後在43偏移,然後在15偏移,以便從44行移動到59.這樣做時可能會遇到不希望的副作用(錯誤行,例如再次從頭開始),如果是這樣,詳情請參閱http://stackoverflow.com/a/13828745/367456(但您可能不會)。 – hakre

-1
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; 
} 
?> 
+0

這個模糊的答案究竟意味着什麼?我只想讀取'x'行和'y'列的數據。你的答案是否相關? – user1518659