van csv naar array naar db

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Meddiecap B

Meddiecap B

01/10/2009 16:28:00
Quote Anchor link
Hoi,

Ik zit met het volgende. Ik heb een csv bestand aangeleverd gekregen met en beetje vreemde, maar wel logische struktuur. Het bestaat uit twee kolommen. 1e rij zijn de namen van de kolom.

Kolom 1 bevat de namen die uiteindelijk elke kolom in de DB moet heten. Kolom 2 bevat de waardes.

In totaal zijn het zo'n 100 kolomnamen, maar ik hoef er maar 10 ofzo te hebben.

De kolomnamen herhalen zich. Elke herhaling bevat de gegevens van een ander persoon (een nummer). De kolomnaam volgorde bij elk persoon is niet hetzelfde.

Vb.
Naamkolom | Waardekolom
1
Naam | Pietje
Achternaam | Puk
Adres | Straat 11
Adres | Postbus 1
2
Achternaam | Akkerman --> hier bijv andersom
Naam | Jan
Adres | Straat 11
3
etc..

Er mag vanuit worden gegaan dat wanneer in kolom 1 een nummer staat, dit een nieuw persoon aanduid.
EDIT: en om de een of andere reden herhalen sommige kolomnamen zich, maar hebben wel andere data. Dit moet ik dan samenvoegen.

Kan iemand mij vertellen/helpen met hoe ik dit naar een database zet.
Dus van cvs naar mysqlDB. Ik kan het csv bestand niet geven want er staat gevoelige data in.

BvD,
Meddiecap
Gewijzigd op 01/01/1970 01:00:00 door Meddiecap B
 
PHP hulp

PHP hulp

05/12/2020 18:01:59
 
Jan Willem van der Veer

Jan Willem van der Veer

01/10/2009 16:58:00
Quote Anchor link
Zie eens de functie fgetcsv
Gewoon elke nieuwe record kijken of de eerste kolom een nummer is. Als dat niet het geval is schrijf je de kolom weg in een array. Is dat daarentegen wel het geval, dan schrijf je het geheel weg in de database.

Dus in mijn geval zou het er een beetje zou uit zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$sFile
= 'bestandsnaam.txt';
if(!($fh = fopen($sFile, 'r'))) die('Bestand kon niet worden uitgelezen!');

$aPerson = Array();
while(true){
  if(!is_string($line = fgets($fh)) || ctype_digit($line)){
    if(count($aPerson))/* Voeg hier de gebruiker toe in de database */;
    $aPerson = Array();
  }
elseif(is_int($iPos = strpos($line, ' | ')){
    $aPerson[trim(substr($line, 0, $iPos))] = substr($line, ($iPos + 3));
  }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Jan Willem van der Veer
 
Meddiecap B

Meddiecap B

05/10/2009 10:30:00
Quote Anchor link
In ieder geval bedankt voor de reactie. Ik ben uiteindelijk met een voorbeeld van php.net aan de slag gegaan en ben tot het volgende gekomen:

Ik echo eerst de te gebruiken ID-nummers. Daarna geef ik aan welke gegevens ik uit het CSV bestand wil gebruiken.

Daarna echo ik de hele boel, maar weet niet hoe ik de kolomnamen verander in de kolomnamen die ik in de DB wil gebruiken. Daarbij komt ook dat bepaalde gegevens uiteindelijk in 1 kolom in de DB moeten komen en dat de volgorde van kolomnamen in het CSV niet altijd hetzelfde is.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$handle
= fopen("bestand.csv", "r");

while (($data = fgetcsv($handle, 4096, ";")) !== FALSE) {
    if (is_numeric($data[0])) {
        echo '<p>'.$data[0].'</p>'; // ..het te gebruiken ID-nummer
    }
    elseif ($data[0] == '(ziekten, aandoeningen, erfelijkh, familiariteit, medische verricht., medicatie)' || // Med. voorgeschiedenis 4
        $data[0] == 'Medische voorgeschiedenis (ziekten, aandoeningen, erfelijkh, familiariteit)' || // Med. voorgeschiedenis 1
        $data[0] == '(medicatiegebruik, nevenpathologie, psychosociale aspecten)' || // Med. voorgeschiedenis 2
        $data[0] == '(aard, ernst, beinvloeding, beloop, tijdslijn, provocatie, reductie)' || // ADL
        $data[0] == '(woonsituatie, thuissituatie, beroep, werkdruk, sport, hobby)' || // Algemene belasting
        $data[0] == 'Belangrijkste gezondheidsproblemen (Contactreden, hulpvraag)' || // Klachtomschrijving
        $data[0] == 'Reden van contact (Hulpvraag patient, betrokkenen)' || // contact_reden
        $data[0] == 'Andere eerdere zorg' || // 2x, Med. voorgeschiedenis 3, 5
        $data[0] == 'Inspectie/Observatie' || // Onderzoek: Inspectie
        $data[0] == 'Algemene opmerkingen' || // Onderzoek: Algemeen
        $data[0] == 'Opmerkingen') // Onderzoek: Opmerkingen
    {
        // Hier staan nu nog de kolomnamen zoals deze in het CSV staan,
        // Deze moeten worden veranderd in de namen die in het commentaar
        // van 'elseif' staan.

        echo $data[0] . ': ';
        echo $data[1].'<br />';
    }
}

fclose($handle);
?>


Ik hoop duidelijk te zijn, en duidelijk te hebben gemaakt wat ik wil.

BvD,
Meddiecap
Gewijzigd op 01/01/1970 01:00:00 door Meddiecap B
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.