CSV datei durchsuchen und ergebnisse ausgeben...

sasser1981

Grünschnabel
Hallo liebe Community,

ich trete erneut mit einem Problem an euch, in der Hoffnung, das mir geholfen werden, oder mir ein Denkanstoss gegeben werden kann.

Folgendes:

Ich habe eine CSV Datei, die mehrere Daten erhält.
Nun soll der User auf der Seite eine PLZ eingeben können, und
alle ergebnisse (ganze zeile) der CSV Datei, die diese PLZ enhält, soll
als neue CSV datei erstellt werden.

Beispiel:

Die CSV:

Code:
ID,Name,Alter,Wohnort,PLZ,Status,WeitereDaten,WeitereDaten
,user1,12,zuHause,15645,bla,,bla
,user2,22,beiMama,12345,bla,,bla
,user3,45,beiOma,12345,bla,,bla
,user4,13,unterDerBrücke,12345,bla,,bla
,user5,15,zuHause,15645,bla,,bla
,user6,24,zuHause,12345,bla,,bla
,user7,23,BeiFreundin,15645,bla,,bla
,user8,10,zuHause,12345,bla,,bla

Der User/Kunde gibt nun auf der Seite in einem Suchfeld die PLZ ein:
15645

Als Ergebnis soll er eine neue Herunterladbare Datei bekommen,
mit dem Inhalt:

Code:
ID,Name,Alter,Wohnort,PLZ,Status,WeitereDaten,WeitereDaten
,user1,12,zuHause,15645,bla,,bla
,user5,15,zuHause,15645,bla,,bla
,user7,23,BeiFreundin,15645,bla,,bla

Wie kann man soetwas OHNE MYSQL realisieren?
Mir raucht seit tagen der Kopf, da ich nie vorher mit CSV dateien gearbeitet habe...


Also die Datei öffenen und Daten ausgeben mit fgetcsv(); bekomme ich hin...
Suchen mit in_array() scheint mir nicht komfortabel, da ich immer nur die PLZ ausgegeben bekomme...
Ich brauche aber die ganze Zeile...

Wer kann helfen? :(
 
Zuletzt bearbeitet:
Hey,

also an dem Punkt, wo du gegen die Plz pruefst, musst Du einfach die komplette Zeile wieder zusammen bauen und in einen Buffer speichern. Den Buffer haengst du dann an deine neue Datei an (fwrite).

Quasi so, pseudocode:
Code:
$fh = fopen('neue-datei.csv');
while ( ($data = fgetcsv...)){
   if( $data[3] == $_POST['plz'] ) {
       $line = implode(',', $data);
       fwrite( $fh, $line );
   }
}
fclose( $fh );
sendFile( 'neue-Datei.csv' );
 
Zuletzt bearbeitet:
Ok, das hilft mir beim erstellen der datei weiter...
Aber wie realisiere ich die Suche, die ja alle Zeilen wiedergeben soll... ?

ich habe gelesen das in_array() auch nicht sonderlich empfehlenswert sein soll...?!
 
Nun, die Zeile "if( $data[3] == $_POST['plz'] ) {" ist ja bereits die Suche :) Denn mit dieser Condition werden nur Zeilen in die neue Datei geschrieben, die als Postleitzahl eben den Wert haben, den der User im Formular eingetippt hat. Leider ist das bei CSV so, dass man jede Zeile durchgehen muss, um dann zu entscheiden, ob jene Zeile angezeigt (oder in deinem Fall abgespeichert) werden soll.
 
also muss ich qusi sagen

if( $data[33] == $_POST['plz'] ) { }
if( $data[65] == $_POST['plz'] ) { }
if( $data[97] == $_POST['plz'] ) { }
etc

ok... das hilft auch weiter...


Aber ein letztes:
Wie kann ich denn die Anzahl der zeilen bestimmen?
Denn dann würde ich sagen ich mach ne schleife...
i=33 (erste Plz)
und dann eine schleife i+32 (jede weitere plz)

if( $data[$i] == $_POST['plz'] ) { }
bis halt zur letzten Zeile...




Code:
$zeilen=500;
for ($i=33; $i < $zeilen; $i+=32)
{
  echo "data[".$i."];";
}

Geht er auch so die letzte zeile durch? ich bin mir net sicher...
schon oder****?
 
Zuletzt bearbeitet:
Vielen Dank =) Habs hinbekommen =)
Der Tipp mit "Leider ist das bei CSV so, dass man jede Zeile durchgehen muss,"
hats gebracht und die anzahl der zeilen habe ich mit

$Zeilen = count(file("$file"));

bestimmt...

Danke!
 
Sry für mehrfachpost, aber ich brauche noch nen denkanstoss...

Ich soll nun, eine CSV (dient als Datenbank)
Mit einer anderen CSV (kundendaten) abgleichen und dann alle
kunden aus die in beiden CSV vorhanden sind als neue CSV speichern.
Das ohne such eingabe. Einfach per klick


Beispiel

Datenbank.csv
stadt,plz,daten,daten,daten,daten,daten
berlin,12345,daten,daten,daten,daten,daten
hamburg,23456,daten,daten,daten,daten,daten
frankfurt,34567,daten,daten,daten,daten,daten
Potsdam,45678,daten,daten,daten,daten,daten

Kunden.csv
Name,stadt,plz,daten,daten,daten,daten,daten
Heinz,berlin,12345,daten,daten,daten,daten,daten
Peter,berlin,12345,daten,daten,daten,daten,daten
Jutta,berlin,12345,daten,daten,daten,daten,daten
Bernd,hamburg,23456,daten,daten,daten,daten,daten
Siggi,Erfurt,11125,daten,daten,daten,daten,daten
Bart,hamburg,23456,daten,daten,daten,daten,daten
Kai,frankfurt,34567,daten,daten,daten,daten,daten
Markus,Potsdam,45678,daten,daten,daten,daten,daten
Klaus,Potsdam,45678,daten,daten,daten,daten,daten


Ergibnis

Potsdam_CSV.csv
Markus,Potsdam,45678,daten,daten,daten,daten,daten
Klaus,Potsdam,45678,daten,daten,daten,daten,daten

Berlin_CSV.csv
Heinz,berlin,12345,daten,daten,daten,daten,daten
Peter,berlin,12345,daten,daten,daten,daten,daten
Jutta,berlin,12345,daten,daten,daten,daten,daten

hamburg_CSV.csv
Bernd,hamburg,23456,daten,daten,daten,daten,daten
Bart,hamburg,23456,daten,daten,daten,daten,daten

frankfurt_CSV.csv
Kai,frankfurt,34567,daten,daten,daten,daten,daten

SIGGI DARF NIRGENDS AUFTAUCHEN, DA SEINE PLZ NICHT IN DER DATENBANK.CSV STEHT!
Siggi,Erfurt,11125,daten,daten,daten,daten,daten




Mein Ansatz ****t leider nicht :(

Code:
  while (($data = fgetcsv($opencsv, $Zeilen, ";")) !== FALSE) #Datenbank
  { 
      $pruef = $data[1];
      
      foreach($pruef as $check)
      {
           while (($Kundendata = fgetcsv($opencsv_kunden, 2064, ",")) !== FALSE)
           {
 
             if($check==$Kundendata[3]) 
            {


Bitte um Denkanstoss =(
 
Zurück