csv parsing

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
majuranus
Δημοσιεύσεις: 404
Εγγραφή: 01 Μαρ 2006 19:47
Τοποθεσία: Veria
Επικοινωνία:

csv parsing

Δημοσίευση από majuranus » 20 Μάιος 2013 19:32

Καλησπέρα στην κοινότητα.
Θα ήθελα να ρωτήσω το εξής:

Έχω ένα αρχείο csv το οποίο και διαβάζω με php και το εμφανίζω σε μορφή πίνακα σε μία σελίδα.
Αυτό που με δυσκολεύει είναι ότι θέλω να εμφανίσω από το αρχείο συγκεκριμένες γραμμές του αρχείου με βάση κάποιες λέξεις κλειδιά τις οποίες έχω σε ένα πίνακα (βάση δεδομένων).

Έχω διαβάσει ότι αν χρησιμοποιήσω while μέσα σε while αυτό δημιουργεί πρόβλημα, καθώς η λογική που σκέφτομαι δεν βγαίνει στον κώδικα.

Κοινώς υπάρχει τρόπος να γίνει κατά την σάρωση μία εσωτερική επανάληψη όπου θα ψάχνω να εντοπίσω τιμές από πίνακα σε κάθε γραμμή του csv αρχείου;

Ιδέες ευπρόσδεκτες :D

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

csv parsing

Δημοσίευση από gvre » 20 Μάιος 2013 19:39

Κάθε πότε αλλάζει το csv αρχείο και πόσο μεγάλο είναι;
Πόσες είναι περίπου οι λέξεις κλειδιά που έχεις στη βάση σου;

Άβαταρ μέλους
majuranus
Δημοσιεύσεις: 404
Εγγραφή: 01 Μαρ 2006 19:47
Τοποθεσία: Veria
Επικοινωνία:

csv parsing

Δημοσίευση από majuranus » 20 Μάιος 2013 19:43

Ευχαριστώ για το ενδιαφέρον κατ αρχήν,

Το csv αρχείο είναι περίπου 20.000 γραμμές και οι λέξεις κλειδιά είναι περίπου 30

Το csv αλλάζει σε καθημερινή βάση.

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

csv parsing

Δημοσίευση από gvre » 20 Μάιος 2013 19:59

Λογικά, το καλύτερο είναι να βάλεις τα data του csv στη βάση και στη συνέχεια με ένα SELECT να εμφανίζεις τις γραμμές που ταιριάζουν με τις λέξεις-κλειδιά.
Θέλεις να ταιριάζει 1 λέξη από κάθε γραμμή του csv με τις 30 της βάσης ή περισσότερες;
Αν μπορείς, στείλε sample data και περισσότερες πληροφορίες σχετικά με το ταίριασμα των λέξεων (αν θα είναι case sensitive, κλπ).

Άβαταρ μέλους
majuranus
Δημοσιεύσεις: 404
Εγγραφή: 01 Μαρ 2006 19:47
Τοποθεσία: Veria
Επικοινωνία:

csv parsing

Δημοσίευση από majuranus » 20 Μάιος 2013 20:07

Προσπαθώ να αποφύγω την καταχώρηση του csv στη βάση
Θέλω να ταιριάζει τουλάχιστον μία λέξη και τότε με μία if θα τυπώνω τη γραμμή του csv που περιέχει τη λέξη αυτή
case sensitive το έχω ρυθμίσει με την stristr δεν ξέρω αν έκανα καλά ή αν υπάρχει κάτι άλλο καλύτερο

Δεδομένα :
Σήμερα θα βρείτε μοναδικές προσφορές στα μήλα
Σήμερα στο σούπερ μάρκετ έχουμε προσφορά τα μήλα
Σήμερα τα πορτοκάλια μόνο 0,44 ευρώ το κιλό

με λέξη κλειδί "μήλα, πορτοκάλια"

Σε αυτό το μοτίβο

Άβαταρ μέλους
majuranus
Δημοσιεύσεις: 404
Εγγραφή: 01 Μαρ 2006 19:47
Τοποθεσία: Veria
Επικοινωνία:

csv parsing

Δημοσίευση από majuranus » 20 Μάιος 2013 20:21

Οκ, Το πρόβλημα το έλυσα! ευχαριστώ για το χρόνο σου

Για κάθε επανάληψη ανάγνωσης λέξης από τη βάση , διαβάζω εξ αρχής το csv οπότε αυτό που ήθελα γίνεται κανονικά.

Επέλεξα να μην ανεβάσω το csv στην βάση καθώς κάτι τέτοιο δεν με εξυπηρετεί. Σε άλλες περιπτώσεις είναι καλύτερο να ανεβάζει κανείς το αρχείο στην βάση και από εκεί να ελέγχει και να συγκρίνει εγγραφές
:kaloe:

gvre
Δημοσιεύσεις: 992
Εγγραφή: 14 Οκτ 2010 11:34
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

csv parsing

Δημοσίευση από gvre » 20 Μάιος 2013 21:15

Το csv χρειάζεται να το διαβάσεις μόνο μια φορά και να αποθηκεύσεις τα data σε μια μεταβλητή.
Η stristr δε σου κάνει αν χρησιμοποιείς UTF-8. Χρειάζεσαι την mb_stristr ή την mb_stripos, αλλά με αυτές και 2πλό loop το αποτέλεσμα είναι πολύ αργό. Με regular expressions που το δοκίμασα είναι πολύ ταχύτερο. Μπορείς επίσης να κάνεις cache το αποτέλεσμα για γρηγορότερη εμφάνιση.

Κώδικας: Επιλογή όλων

$keywords = 'μήλα|αχλάδια|μανταρίνια|αγγούρια|ντομάτες|πατάτες|λάχανα|καρπούζια|πεπόνια|καρότα'; // από τη βάση με ένα SELECT
$data = file('data.csv');
$pattern = '#(?:' . $keywords . ')#ui';
foreach($data as $line)
{
        if (preg_match($pattern, $line))
        {
                echo $line;
        }
}

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες