ugrás a tartalomhoz

CSV-ből beolvasott adatok validálása

walko · 2009. Már. 30. (H), 10.05
Sziasztok,

Szeretném a segítségeteket kérni a következő feladat megoldásában. Van egy CSV file-ből beolvasott 11 elemű tömböm. Validálni szeretném a következő elemeit:
0. elem csak szám és kötelező
7. elem csak szám és kötelező
8-9-10. elemek csak szám és lehet üres elem (NULL, azaz a csv file-ban nem volt semmi két pontos vessző között)

Hogy lehetne ez szépen elegánsan megoldani?
Segítségeteket előre is köszönöm.
 
1

Ilyesmi

Poetro · 2009. Már. 30. (H), 10.51
<?php
$handle = fopen("test.csv", "r");
$row = 0;
$needed_rows = 11;
$validated = array();
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
  $row++;
  if ($needed_rows != count($data)) {
    foreach ($data as $index => $value) {
      $errors = array();
      switch ($index) {
        case 0:
        case 1:
          if (strlen($value) == 0 || !is_numeric($value)) {
            $errors[] = sprintf("%d column does not contain a number, contains '%s' instead",
                                $row, $index + 1, $value);
          }
          break;
        case 8:
        case 9:
        case 10:
          if (!empty($value) && !is_numeric($value)) {
            $errors[] = sprintf("%d column does not contain a number, contains '%s' instead",
                                $row, $index + 1, $value);            
          }
          break;
      }
      
      if (empty($errors)) {
        $validated[] = $data;
      }
      else {
        printf("Row %d contains the following errors:\n\t%s", $row, implode("\n\t", $errors));
      }
    }
  }
  else {
    printf('Row %d contains %d rows instead of the needed %d', $row, count($data), $needed_rows);
  }
}
fclose($handle);
?>
2

köszönöm

walko · 2009. Már. 30. (H), 11.06
Nagyon köszönöm a gyors, pontos és érthető választ Poetro!
:)
Klasszul működik!