Zoeken in string werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sjors Clemens

Sjors Clemens

20/03/2013 10:20:11
Quote Anchor link
Hopelijk is hier iemand die me hiermee kan helpen, want ik snap echt niet waarom dit niet werkt.

Ik heb een CSV-bestand. Daar wil ik een aantal bewerkingen/filters op uitvoeren. Het is een overzicht van de bezetting van lokalen van ons onderwijscentrum. De CSV-export wordt gemaakt vanuit ons e-learning systeem (daar kan ik helaas niks aan wijzigen).

Eén van de filters die ik wil uitvoeren, is zoeken of bij de locatie (3e kolom) "lokaal" staat. Dat zou moeten lukken met strpos of stristr, maar die functies werken alleen als ik maar één letter als zoekwoord opgeef.

Wat ik nu heb:

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
<?
$handle
= fopen($_FILES['file']['tmp_name'], "r");
$data = fgetcsv($handle, 1000, ";"); //Remove if CSV file does not have column headings
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
 {


    $lokaal=$data[2];
    $zoeklokaal='lokaal';
    $geenzelfstudie=strpos($lokaal, $zoeklokaal);

    if($geenzelfstudie !== false)
    {

    //rest vh programmeerwerk
    }
?>


Als ik $lokaal echo, dan komt daar gewoon "lokaal 1" oid te staan, dus de gegevens komen wel uit de CSV. Als ik alleen een o bij $zoeklokaal zet, dan krijg ik alle lokalen, maar ook overal waar ook een o in zit.

Zit ik ergens enorm overheen te kijken of zou dit gewoon moeten werken?
 
PHP hulp

PHP hulp

24/11/2024 03:58:21
 
Ward van der Put
Moderator

Ward van der Put

20/03/2013 11:48:40
Quote Anchor link
Bedenk dat strpos() hoofdlettergevoelig is en stripos() met een i niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?
$handle
= fopen($_FILES['file']['tmp_name'], 'r');
$data = fgetcsv($handle, 1000, ';'); //Remove if CSV file does not have column headings
while (($data = fgetcsv($handle, 1000, ';')) !== false)
{

    if (stripos($data[2], 'lokaal') !== false) {
        // We hebben een 'lokaal' of een 'Lokaal' of een 'LOKAAL'...
    }
}

fclose($handle);
?>
 
Sjors Clemens

Sjors Clemens

20/03/2013 12:05:06
Quote Anchor link
In ieder geval bedankt voor het flink simplificeren van m'n code, maar helaas lag het niet aan de hoofdlettergevoeligheid. Ik was ook al op okaal aan het zoeken geweest, maar dat werkt ook niet. Ook dit werkt alleen als ik op één letter zoek.

De CSV is als volgt opgebouwd overigens:
2013;Class 1;Zelfstudie;31-12-2013 0:00:00;1-1-1900 9:00:00;1-1-1900 12:00:00;
2013;Class 2;lokaal 5;27-12-2013 0:00:00;1-1-1900 15:00:00;1-1-1900 17:00:00;
 
Ward van der Put
Moderator

Ward van der Put

20/03/2013 12:17:01
Quote Anchor link
Misschien ligt het aan je code in de if? De rij vind ik namelijk wel met je voorbeeld-CSV:

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
29
30
<?php
while (($data = fgetcsv($handle, 1000, ';')) !== false)
{

    if (stripos($data[2], 'lokaal') !== false) {
        echo '<pre>';
        var_dump($data);
        /**
         * Toont alleen de data met 'lokaal 5':
        
           array(7) {
             [0]=>
             string(4) "2013"
             [1]=>
             string(7) "Class 2"
             [2]=>
             string(8) "lokaal 5"
             [3]=>
             string(18) "27-12-2013 0:00:00"
             [4]=>
             string(17) "1-1-1900 15:00:00"
             [5]=>
             string(17) "1-1-1900 17:00:00"
             [6]=>
             string(0) ""
           }

         */

    }
}

?>
 
Sjors Clemens

Sjors Clemens

20/03/2013 14:24:40
Quote Anchor link
Volgens mij ben ik erachter waar het aan ligt. Het bestand dat de leeromgeving output is in Unicode. Daar lijkt het probleem te zitten, want als ik via kladblok het bestand als UTF8 opsla, dan werkt het script zonder problemen (dat verklaart waarschijnlijk ook waarom het bij jou wel lukte).

Ik zit nu te zoeken hoe je $data[2]/de hele CSV om zou kunnen zetten zodat het wel werkt zonder de tussenstap met kladblok, maar dat wil nog niet lukken.
 



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.