CSV-bestand kolom doorzoeken en weergeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Web Ontwikkelaar PHP, Nijmegen

Contactpersoon Roel Kavelaar rkavelaarATsearch-consult.nl 0243528815 0644949337 Organisatie Jong, gezond en sterk groeiende bedrijf dat webbased multimedia oplossingen bouwt in de omgeving Nijmegen. Het bedrijf bouwt voor klanten o.a. geavanceerde websites, webwinkels, webapplicaties en specifieke webbased software. Het bedrijf ontwikkelt en onderhoudt ook verschillende bekende Nederlandse websites. Op dit moment hebben zij een groeiende en brede klantenkring opgebouwd. Met betrekking tot programmeer-, onderhoud-, ontwerp-werkzaamheden wordt een PHP ontwikkelaar gezocht met kennis van contentmanagementsysteemen en frameworks. Locatie Nijmegen Verantwoordelijkheden (Her)Ontwerpen en (her)ontwikkelen in PHP ten behoeve van websites voor klanten, project klussen, onderhoud en specifieke klantwensen (Her)Ontwerpen en (her)ontwikkelen in PHP, PHP

Bekijk vacature »

Front-End Developer – Junior/Medior/Senior

Onze opdrachtgever Onze opdrachtgever maakt kassa’s, personeelsplanning bar-/keukenmanagement, tafelreserveringssoftware, websites en webshops. Van horeca tot retail, van leisure tot zorg: elke ondernemer mag bij hun aankloppen. 24/7 spelen ze proactief in op de markt. Met softwareontwikkeling, projectmanagement, systeemimplementatie, helpdesk en technische dienst in eigen beheer bieden ze zo zekerheid voor haar klanten. Standplaats Hengelo Waar we jou voor nodig hebben? Van sterrenrestaurant tot vakantiepark: de klanten van onze opdrachtgever zijn heel divers. Een intuïtieve orderwebsite voor een grote cateraar of een sieradenplatform voor een juwelier, je draait er je hand niet voor om. Je communiceert helder en staat klanten graag

Bekijk vacature »

-- evilrabbit --

-- evilrabbit --

28/02/2018 08:55:15
Quote Anchor link
Hoi!

Ik heb een error_log.csv bestand dat ik waarin ik de eerste kolom met datum en tijd wil doorzoeken, zodat ik de errors met details van die bepaalde datum kan weergeven.

Ik heb al heel wat geprobeerd. Ik baseerde mij op deze werkende code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$search
= 'Heliport';
if (($fp = fopen("data.csv", "r")) !== false) {
    while (($row = fgetcsv($fp)) !== false) {
        if($row[3] === $search) {
            echo 'Found ' . $row[3] . ': ' . $row[4] . ', ' . $row[5] . "\n";
        }
    }

    fclose($fp);
}

?>


Mijn error_log.csv heeft als indeling:
"06-01-2017 13:57:11", "type error", "bestandslocatie", "lijnnummer"

Samengevat wil ik dus de volledige rij weergeven waarvan de datum en tijd matcht met de gevraagde datum.

Wie heeft er een idee? Alvast bedankt om mee na te denken.
 
PHP hulp

PHP hulp

21/05/2019 01:42:06
Honeypot
 
Aad B

Aad B

28/02/2018 11:40:30
Quote Anchor link
Misschien interessant om je apache webserver meteen in MySQL te loggen?
http://dasunhegoda.com/apache-access-logs-to-mysql-database/953/
Maakt geindexeerd snel zoeken mogelijk een scheelt veel programmeerwerk.

Je huidige code: Werkt het niet? Welke foutmeldingen krijg je?
 
- Ariën -
Beheerder

- Ariën -

28/02/2018 11:48:12
Quote Anchor link
Is het niet een beetje tricky om je error-logging van Apache uit te besteden aan een ander proces, zoals MySQL? Want, als die op zijn gat gaat... wat doet de logging dan?

En hoe vaak moet je nou in een error_log spitten? Met grep en tail kan je al prima rondneuzen in een dergelijk bestand. Met zoeken met grep kan soms even enkele tellen duren, maar een error_log lijkt mij puur alleen voor debuggen.
 
Thomas van den Heuvel

Thomas van den Heuvel

28/02/2018 16:03:52
Quote Anchor link
- Ariën - op 28/02/2018 11:48:12:
En hoe vaak moet je nou in een error_log spitten?

Vaker dan je denkt. In productie-omgevingen zijn errorlogs vaak je (enige) vriend.

- Ariën - op 28/02/2018 11:48:12:
Met grep en tail kan je al prima rondneuzen in een dergelijk bestand.

Niet iedereen heeft unix-knowhow, of shell access, for that matter.

ontopic:
Quote:
Ik heb een error_log.csv bestand dat ik waarin ik de eerste kolom met datum en tijd wil doorzoeken, zodat ik de errors met details van die bepaalde datum kan weergeven.

Dit wordt een beetje lastig als het datumformaat van jouw beschreven indeling daadwerkelijk dd-mm-jjjj uu:mm:ss is. Het zou een ander verhaal zijn als het datumformaat jjjj-mm-dd uu:mm:ss is. In dit laatste geval zou dit een stuk eenvoudiger zijn omdat dat datumformaat (wat overigens een standaard is, dit in tegenstelling tot dd-mm-jjjj...) een alfabetische sortering volgt. Het enige wat je in dat geval nodig hebt is een interval A t/m B waarin je geïnteresseerd bent.

Mijn eerste vraag is dus eigenlijk: hoe luidt een exacte timestamp (het datumformaat) in deze errorlog? Als dit niet jjjj-mm-dd is is dat ook geen ramp, maar dan heb je wat meer code nodig om te kunnen rekenen met deze datums.
 
-- evilrabbit --

-- evilrabbit --

05/03/2018 05:55:44
Quote Anchor link
Aad B op 28/02/2018 11:40:30:
Misschien interessant om je apache webserver meteen in MySQL te loggen?
http://dasunhegoda.com/apache-access-logs-to-mysql-database/953/
Maakt geindexeerd snel zoeken mogelijk een scheelt veel programmeerwerk.

Je huidige code: Werkt het niet? Welke foutmeldingen krijg je?


De meeste errors die worden weggeschreven naar het CSV-bestand zijn fouten die zich voordoen in de database. In dit geval lijkt het mij dus niet verstandig om het CSV naar een DB over te zetten.
Anders zou dit idd een oplossing kunnen zijn...
 
Jelmer -

Jelmer -

05/03/2018 09:34:34
Quote Anchor link
Volgens mij zou je het op twee manieren kunnen doen: of je maakt van iedere datum/tijd in het logbestand eerst een datum in PHP met DateTime, of je bouwt een string die overeenkomt met de dag die je zoekt en vergelijkt daar op.

Bij idee 1 kan je echt een datum-range meegeven, en maakt het niet zoveel uit in welk formaat de datum in je foutmeldingen wordt weggeschreven, zo lang PHP het maar herkent:

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
<?php

function is_between($field, $from, $till) {
    $date = new DateTime($field);
    return $date >= $from && $date <= $till;
}


// Geen idee hoe je makkelijker vandaag, 0:00 krijgt… hoeft ook niet, je kan willekeurige bereiken zoeken
$today = new DateTime((new DateTime())->format('Y-m-d 00:00:00'));
$tomorrow = clone $today;
$tomorrow->modify('+1 day');

if (($fp = fopen("data.csv", "r")) !== false) {
    while (($row = fgetcsv($fp)) !== false) {
        if(is_between($row[0], $today, $tomorrow)) {
            echo 'Found ' . $row[3] . ': ' . $row[4] . ', ' . $row[5] . "\n";
        }
    }

    fclose($fp);
}


?>


Idee 2 is sneller, want je hoeft niet alle data te parsen. Nadeel is dat je maar op één dag kan zoeken, en niet op een tijd-range

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

$search_date
= date('d-m-Y ');

if (($fp = fopen("data.csv", "r")) !== false) {
    while (($row = fgetcsv($fp)) !== false) {
        if(strncmp($row[0], $search_date, strlen($search_date)) === 0) {
            echo 'Found ' . $row[3] . ': ' . $row[4] . ', ' . $row[5] . "\n";
        }
    }

    fclose($fp);
}


?>
 



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.