Пропустить первую строку файла CSV
Я пытаюсь импортировать CSV файл. Из-за используемой нами программы первая строка - это, по сути, все заголовки, которые я хотел бы пропустить, так как я уже размещал свои собственные заголовки через HTML. Как я могу заставить код пропустить первую строку CSV? (команда strpos должна отключить первое поле во всех строках).
<?php
$row = 1;
if (($handle = fopen("ptt.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
if(strpos($data[$c], 'Finished') !== false) {
$c++;
echo "<TR> <TD nowrap>" . $data[$c] . "</ TD>"; }
Else{
echo "<TD nowrap>" . $data[$c] . "</ TD>";
}
}
}
fclose($handle);
}
?>
Ответы
Ответ 1
Поскольку вы все равно отслеживаете номер строки, вы можете использовать continue
для пропусков остальной части цикла для первой строки.
Например, добавьте это в начало цикла while (чуть выше $num = count($data)
):
if($row == 1){ $row++; continue; }
Есть и другие способы сделать это, но просто убедитесь, что, когда вы продолжаете, $row
все еще увеличивается, или вы получите бесконечный цикл!
Ответ 2
Вместо того, чтобы использовать условие для проверки, является ли это первой строкой, лучшим решением является просто добавить дополнительную строку кода до строки, из которой начинается цикл while, как показано ниже:
....
.....
fgetcsv($handle);//Adding this line will skip the reading of th first line from the csv file and the reading process will begin from the second line onwards
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
.......
.......
Это так же просто......
Ответ 3
поместите это внутри цикла while:
if ($row == 1) continue;
Ответ 4
Добавить это в теле в while
цикла выше $row++;
:
if ($row == 1) {
continue;
}
Ответ 5
$count = 0;
while (($fields = fgetcsv($handle, 0, ",")) !== FALSE) {
$count++;
if ($count == 1) { continue; }
Ответ 6
это сработало для меня:
$count = 0;
while(! feof($file))
{
$entry = fgetcsv($file, 0, ';');
if ($count > 0) {
//skip first line, header
}
$count++;
}
Ответ 7
Используйте следующие строки кода
$flag = true;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($flag) { $flag = false; continue; }
//your code for insert
}
Имея переменную flag как true и устанавливая ее в false, пропустите первую строку файла CSV. Это просто и легко реализовать.
Ответ 8
используйте этот код
// mysql hostname
$hostname = 'localhost';
// mysql username
$username = 'root';
// mysql password
$password = '';
if (isset($_FILES['file']))
{
// get the csv file and open it up
$file = $_FILES['file']['tmp_name'];
//$handle is a valid file pointer to a file successfully opened by fopen(), popen(), or fsockopen().
$handle = fopen($file, "r");
try {
// Database Connection using PDO
$dbh = new PDO("mysql:host=$hostname;dbname=clasdb", $username, $password);
// prepare for insertion
$STM = $dbh->prepare('INSERT INTO statstrackertemp (ServerName, HiMemUti, AvgMemUti, HiCpuUti, AvgCpuUti, HiIOPerSec, AvgIOPerSec, HiDiskUsage, AvgDsikUsage) VALUES (?, ?, ?, ?, ?,?, ?, ?, ? )');
if ($handle !== FALSE)
{
// fgets() Gets a line from file pointer and read the first line from $handle and ignore it.
fgets($handle);
// created loop here
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE)
{
$STM->execute($data);
}
fclose($handle);
}
}
catch(PDOException $e)
{
die($e->getMessage());
}
echo 'Data imported';
}
else
{
echo 'Could not import Data';
}
?>