我想选择文本文件的特定列。我正在使用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进行操作?
答案 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)
您可以合并explode和file(如果该文件中有很多行)。
<?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
调整实际的表格布局。例如,如果3
和A
代表不同的列,请进行此更改:
// how long is each field?
$field_legths = array(20, 11, 2, 20, 3);
$conditions = array();
$conditions[2] = "3";
$conditions[3] = "A";