De verificação do cabeçalho, no formato csv e ignorar cabeçalho em php
-
12-12-2019 - |
Pergunta
Eu gostaria de verificar se o arquivo csv que contém um cabeçalho e ignorar o cabeçalho.
Eu tenho que fazer uma verificação se a primeira coluna não é um personagem
arquivo csv tem o formato de :avgTemperature, minTemperature, maxTemperature
$f = fopen("./uploads/" .$filename, "r"); $string = "avgTemperature"; if (fgetcsv($f)==$string){ // read the first line and ignore it fgets($f); }
Solução
Vai partir seu comentário, e da ideia de que os dados reais de temperatura (i.e.dados numéricos), em caso afirmativo, em seguida, eles serão seqüências de caracteres de texto e não de números.Portanto, você pode fazer algo como isto:
$f = fopen("./uploads/" .$filename, "r");
if(!($data = fgetcsv($f))) {
return; //most likely empty file
}
if(!is_numeric($data[0])) {
//this is your header line - skip it - and read the next line
$data = fgetcsv($f);
}
while($data) {
//process a line of data
...
//and read the next line
$data = fgetcsv($f);
}
EDITAR: Uma versão alternativa do último ciclo teria esta aparência:
do {
//process a line of data
...
}
while ($data = fgetcsv($f));
Outras dicas
Eu suponho que o seu código completo usa um loop (while
ou for
).
Como tal, você tem algumas opções.
- Simplesmente ignore a primeira linha sempre.
- Use a lógica para testar a linha de cabeçalho em seguida, avance.
De qualquer forma, continue
é a peça-chave.
PHP pseudo-código:
while (…) {
if ($row == $header_row) {
continue;
}
// data rows
}
ATUALIZAÇÃO
A lógica para determinar se a primeira linha é uma linha de cabeçalho parece ser uma melhor solução para o seu caso.Você pode usar o seguinte para testar isso.
if ($row[0] == 'avgTemperature') {
// header row
}
Nota: Isso torna a suposição de que a primeira coluna de dados é avgTemperature e é de cabeçalho é avgTemperature.Ajuste conforme necessário.