Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Provjera brojeva u CSV fileu
Author Message
Son Goku Offline
Novi korisnik
*

Posts: 41
Joined: Jan 2008
Reputation: 0
Post: #1
Provjera brojeva u CSV fileu
Pozdrav.

Imam PHP skriptu koja provjerava CSV file koji moze imati neogranicen redova i u svakom redu ima 10 brojeva koji mogu biti od 1 do 20.
Sadrzaj primjera CSV filea(download http://www.2shared.com/file/WAhbs9yu/csv_brojevi.html):
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
9, 10, 11, 12, 13, 14, 15, 16, 17, 18
13, 14, 15, 16, 17, 18, 19, 12, 11, 10
5, 7, 8, 9, 12, 14, 2, 6, 1, 15
17, 12, 13, 6, 8, 9, 7, 19, 20, 16

I sada provjeravam u svakom redu koji brojevi nedostaju u razmaku od 1 do 20. Dakle nakon sto mi skripta izbaci sadrzaj CSV filea pokraj svakog reda mi se prikazu brojevi koji nedostaju u razmaku od 1 do 20.
Rezultat skripte:
Code:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 - nedostaju: 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
9, 10, 11, 12, 13, 14, 15, 16, 17, 18 - nedostaju: 1, 2, 3, 4, 5, 6, 7, 8, 19, 20
13, 14, 15, 16, 17, 18, 19, 12, 11, 10 - nedostaju: 1, 2, 3, 4, 5, 6, 7, 8, 9, 20
5, 7, 8, 9, 12, 14, 2, 6, 1, 15 - nedostaju: 3, 4, 10, 11, 13, 16, 17, 18, 19, 20
17, 12, 13, 6, 8, 9, 7, 19, 20, 16 - nedostaju: 1, 2, 3, 4, 5, 10, 11, 14, 15, 18

E sada bi trebao postici da mu skripta provjerava svaka 2 reda, znaci 1 i 2 red, 2 i 3 red, 3 i 4 red, itd... Tj da mi se ispisu brojevi koji nedostaju pokraj svaka 2 reda, znaci ovako nesto da dobijem:
Code:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
9, 10, 11, 12, 13, 14, 15, 16, 17, 18 - nedostaju: 19, 20
13, 14, 15, 16, 17, 18, 19, 12, 11, 10 - nedostaju: 1, 2, 3, 4, 5, 6, 7, 8, 20
5, 7, 8, 9, 12, 14, 2, 6, 1, 15 - nedostaju: 3, 4, 20
17, 12, 13, 6, 8, 9, 7, 19, 20, 16 - nedostaju: 3, 4, 10, 11, 18
02-12-2011 11:59 AM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #2
RE: Provjera brojeva u CSV fileu
Ok predpostaviti cu da si koristio fcsvget funkciju za dobivanje sadržaja prvog radka u obliku numerirane liste, pa sada samo prodji kroz tu listu i u jednu posebnu listu stavi trenutnu i sljedecu listu i zatim usporedi funkcijom array_dif sa predefiniranom listom koja sadrže sve brojeve sa tom listom i na kraju to mozes gurnuti negdje na neku posebbnu listu da dobijes listu svih lista koje fale. Dakel Sve ovo sto sam ekao mozemo napisati u php-u ovako

PHP Code:
<?php
$file 
"csv_brojevi.csv";

$complete_array = array (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
$union_array = array ();
$result_array = array ();
$csv_array = array ();

if ((
$fh fopen ($file'r'))) {
    while (
$data fgetcsv($fh60", ")) {
        
array_push($csv_array$data);
    }
    
$num  count ($csv_array);
    for (
$i 0$i $num-1;$i++) {
        
        
$union_array array_unique(array_merge($csv_array[$i], $csv_array[$i+1]), SORT_NUMERIC);
        
array_push($result_arrayarray_diff($complete_array$union_array));
    }
}
?>

"When all else fails, read the manual."
02-12-2011 02:52 PM
Find all posts by this user Quote this message in a reply
Son Goku Offline
Novi korisnik
*

Posts: 41
Joined: Jan 2008
Reputation: 0
Post: #3
RE: Provjera brojeva u CSV fileu
Hvala ti, isprika sto tek sada odgovaram. U medjuvremenu su mi da drugom forumu dali tocno sta mi treba:

PHP Code:
<?php 
  
$handle 
fopen("csv_brojevi.csv""rb"); 
//Deklarisem i na 0 samo da bi preskocio prvi red, jer tu ne treba nista traziti
$i 0
$testArray1 = array();
$testArray2 = array();

while ((
$data fgetcsv($handle5000",")) !== FALSE) {      
$array2 $data
$comma_separated2 implode(", "$array2); 
echo 
$comma_separated2
echo 
" - nedostaju: "

$testArray2 $data;
//prvi prolaz ne trazi i ne ispisuj sta nedostaje
if($i != 0){
    
$testArray2 $data;
    
$dva_reda array_unique(array_merge($testArray1$testArray2));

    
$arrayRange range(1,20); 
    
$missingValues array_diff($arrayRange,$dva_reda); 

    
$array $missingValues
    
$comma_separated implode(", "$array); 

    echo 
$comma_separated
}
echo 
"<br>";
$testArray1 =  $testArray2;
//Pri prvom prolazu postavim i = 1 sto mi oznacava da vise ne treba preskakati trazenje razlike ispis
$i 1;


?>

Pozdrav
14-12-2011 03:00 PM
Find all posts by this user Quote this message in a reply
Son Goku Offline
Novi korisnik
*

Posts: 41
Joined: Jan 2008
Reputation: 0
Post: #4
RE: Provjera brojeva u CSV fileu
Pozdrav. Kada imam brojeve u CSV fileu odvojene sa ;
Code:
1; 2; 3; 4; 5; 6; 7; 8; 9; 10
9; 10; 11; 12; 13; 14; 15; 16; 17; 18
13; 14; 15; 16; 17; 18; 19; 12; 11; 10
5; 7; 8; 9; 12; 14; 2; 6; 1; 15
17; 12; 13; 6; 8; 9; 7; 19; 20; 16
1; 2; 3; 4; 5; 6; 7; 8; 9; 19

onda skripta daje krivi rezultat
Code:
1; 2; 3; 4; 5; 6; 7; 8; 9; 10
9; 10; 11; 12; 13; 14; 15; 16; 17; 18 - nedostaju: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
13; 14; 15; 16; 17; 18; 19; 12; 11; 10 - nedostaju: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
5; 7; 8; 9; 12; 14; 2; 6; 1; 15 - nedostaju: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
17; 12; 13; 6; 8; 9; 7; 19; 20; 16 - nedostaju: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
1; 2; 3; 4; 5; 6; 7; 8; 9; 19 - nedostaju: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20

tj. ne ispisuje brojeve koji nedosataju, nego sve brojeve od 1 do 20...

Da li se moze to kako popraviti?

Hvala i pozdrav :)
(This post was last modified: 14-12-2011 05:18 PM by Son Goku.)
14-12-2011 05:17 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #5
RE: Provjera brojeva u CSV fileu
Pa odgovor ti leži u ovoj funkciji točnije trećem parametru ove funkcije
PHP Code:
fgetcsv($handle5000","
To ti je tzv *delimiter* odnosno specijalni znak koji razdvaja brojeve tebi je očito (ako pogledas) u prvom primjeru delimiter *,* a u drugom primjeru ti je *; * stoga samo zamjeni sa :
PHP Code:
fgetcsv($handle5000"; "

I trebalo bi proraditi :)

"When all else fails, read the manual."
(This post was last modified: 14-12-2011 09:37 PM by danielvast.)
14-12-2011 09:36 PM
Find all posts by this user Quote this message in a reply
r0tring Offline
Redoviti posjetitelj
**

Posts: 237
Joined: Apr 2009
Reputation: 11
Post: #6
RE: Provjera brojeva u CSV fileu
Daniel, sad očekuj pitanje:

" Kada imam brojeve u CSV fileu odvojene sa "," (zarezom) onda skripta daje krivi rezultat tj. ne ispisuje brojeve koji nedosataju, nego sve brojeve od 1 do 20...
Da li se moze to kako popraviti? "
: P

Mislim da hoće da mu skripta radi i sa ", " i sa "; ". :)
14-12-2011 11:08 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #7
RE: Provjera brojeva u CSV fileu
Sve sto je potrebno da se ovo rijesi je malo razmisljanja i nista vise mada da radi i sa , i sa ; nema mi smisla zna se koji se delimiter koristi u csv file-u (piše u samom imenu) al eto ispricavam se sto sam pogresno shvatio He he . Ovo ce raditi sa oba delimitera :
PHP Code:
<?php
$file 
"csv_brojevi.csv";

$complete_array = array (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
$union_array = array ();
$result_array = array ();
$csv_array = array ();


if ((
$fh fopen ($file'r'))) {
    while (
$data fgetcsv($fh50", ")) {
        foreach (
$data as $value) {
            
array_push($csv_arrayexplode("; "$value));
        }
    }
    
$num  count ($csv_array);
    for (
$i 0$i $num-1;$i++) {
        
        
$union_array array_unique(array_merge($csv_array[$i], $csv_array[$i+1]), SORT_NUMERIC);
        
array_push($result_arrayarray_diff($complete_array$union_array));
    }
}
?>

"When all else fails, read the manual."
15-12-2011 01:02 AM
Find all posts by this user Quote this message in a reply
Son Goku Offline
Novi korisnik
*

Posts: 41
Joined: Jan 2008
Reputation: 0
Post: #8
RE: Provjera brojeva u CSV fileu
(14-12-2011 09:36 PM)danielvast Wrote:  Pa odgovor ti leži u ovoj funkciji točnije trećem parametru ove funkcije
PHP Code:
fgetcsv($handle5000","
To ti je tzv *delimiter* odnosno specijalni znak koji razdvaja brojeve tebi je očito (ako pogledas) u prvom primjeru delimiter *,* a u drugom primjeru ti je *; * stoga samo zamjeni sa :
PHP Code:
fgetcsv($handle5000"; "

I trebalo bi proraditi :)
Pozdrav. Hvala na odgovoru.

Probao sam to vec, ali ne pomaze, i dalje izlistava sve brojeve :(
Isprika, ne mogu editirati post, pa evo novi:

(15-12-2011 01:02 AM)danielvast Wrote:  Sve sto je potrebno da se ovo rijesi je malo razmisljanja i nista vise mada da radi i sa , i sa ; nema mi smisla zna se koji se delimiter koristi u csv file-u (piše u samom imenu) al eto ispricavam se sto sam pogresno shvatio He he . Ovo ce raditi sa oba delimitera :
PHP Code:
<?php
$file 
"csv_brojevi.csv";

$complete_array = array (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
$union_array = array ();
$result_array = array ();
$csv_array = array ();


if ((
$fh fopen ($file'r'))) {
    while (
$data fgetcsv($fh50", ")) {
        foreach (
$data as $value) {
            
array_push($csv_arrayexplode("; "$value));
        }
    }
    
$num  count ($csv_array);
    for (
$i 0$i $num-1;$i++) {
        
        
$union_array array_unique(array_merge($csv_array[$i], $csv_array[$i+1]), SORT_NUMERIC);
        
array_push($result_arrayarray_diff($complete_array$union_array));
    }
}
?>
Sorry, nije mi bas jasno ovo, sta trebam echo-ati da mi se prikazu rezultati?
(This post was last modified: 15-12-2011 12:38 PM by Son Goku.)
15-12-2011 12:34 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #9
RE: Provjera brojeva u CSV fileu
Samo dodaj
PHP Code:
foreach ($result_array as $value)
echo 
implode ("," $value) . "<br />"//ovdje mozes dodavati sta hoces da ti ispise 
iza zadnje zagrade, ova skripta radi tako da sve brojeve iz pravog rada stavi u jedan array, zatim drugi u drugi itd.. zatim prebroji koliko ih ima i spoji (jedinstveno) predhodnu i sljedecu te razlike između citavog array-a pohranjuje na stog u $result_array

"When all else fails, read the manual."
(This post was last modified: 15-12-2011 01:05 PM by danielvast.)
15-12-2011 01:05 PM
Find all posts by this user Quote this message in a reply
Son Goku Offline
Novi korisnik
*

Posts: 41
Joined: Jan 2008
Reputation: 0
Post: #10
RE: Provjera brojeva u CSV fileu
Hvala ti puno, uspio sam :)
(This post was last modified: 15-12-2011 01:44 PM by Son Goku.)
15-12-2011 01:44 PM
Find all posts by this user Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)