如何使用php从文本文件中获取列

时间:2012-03-07 19:12:35

标签: php csv

我想选择文本文件的特定列。我正在使用PHP。该文件的内容是

F: TC#              Alpha      1 A                   Z  
F: TC#              Alpha      2 A                   Z  
F: TC#              Alpha      3 A                   Z  
F: TC#              Alpha      1 0                   3   

现在我想选择内容为3 A的整列。如何使用PHP进行操作?

4 个答案:

答案 0 :(得分:1)

您的文件是否以空格分隔?只需使用explode()

http://php.net/manual/en/function.explode.php

$line = 'Joe Jack Jill Jimmy Jerom Jolly Jecob Jason Jasper';
$cols = explode(' ', $line);

echo $cols[1]; // Will return "Jack"

答案 1 :(得分:1)

您可以合并explodefile(如果该文件中有很多行)。

<?php
$lines = file('file.txt');
foreach ($lines as $line) {
    $parts = explode(' ', $line);
    echo isset($parts[1]) ? $parts[1] : 'N/A' ;
}

答案 2 :(得分:0)

$fh = fopen('textfile.txt', 'r'); // open input file
$line= fgets($fh); // get a line from the file
$second = (preg_split("/[\s]+/", $line))[1]; // get 2nd column in a split by whitespace
fclose($fh); // close file

答案 3 :(得分:0)

如果您只想在一行中选择字符串3 A普通出现,您可以这样做:

$search = "3 A";
$matches = array();
$fp = fopen("file.txt", "r");
while (!feof($fp)) {
  $line = fgets($fp, 4096);
  if (strpos($line, $search) !== false) {
    $matches[] = $line;
  }
}
print_r($matches); // voila

如果3 A的出现必须在特定列中,事情会变得更加复杂。您必须将每一行(“行”)拆分为一个数组,该数组包含每个“列”的元素。

你可以通过空格字符(或制表符?文件的外观如何?)来爆炸字符串,但这可能有问题。当3 A包含在单个“列”中时, 会出错。

如果它是一个固定宽度的表(你的例子看起来像),找到每个字段的长度并将这些行分成几部分。 例如:

// how long is each field?
$field_legths = array(20, 11, 22, 3);

$conditions = array();
$conditions[2] = "3 A"; // search "3 A" in 3rd field (index 2)

$matches = array();
$fp = fopen("file.txt", "r");
while (!feof($fp)) {
  $line = fgets($fp, 4096);

  // split line into row array
  $cursor_pos = 0;
  $row = array();
  foreach ($field_legths as $length) {
    $row[] = trim(substr($line, $curser_pos, $length));
    $cursor_pos += $length;
  }

  // search row array for conditions
  foreach ($conditions as $index => $search) {
     if ($row[$index] == $search) {
       $matches[] = $row;
       break;
     }
  }
}
print_r($matches); // voila

调整实际的表格布局。例如,如果3A代表不同的列,请进行此更改:

// how long is each field?
$field_legths = array(20, 11, 2, 20, 3);

$conditions = array();
$conditions[2] = "3";
$conditions[3] = "A";