PHP CSV parser. Uvoz iz CSV-a ili izvoz u CSV. Kako raščlaniti CSV datoteku koristeći PHP Sortiranje CSV datoteka

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Dovoljno visoko, kupci to traže uvoz robe iz njihovih cjenika. Moraju biti u mogućnosti ne samo dodavati nove proizvode na stranicu, već i ažurirati cijene i količine na zalihama postojećih proizvoda.

PHP, kao što znate, ne može rad s excel datotekama koristeći standardna sredstva. Naravno, postoji mnogo različitih klasa koje mogu čitati i pisati informacije u Excelu, ali ima dosta problema s njima (o tome ćemo pisati u narednim člancima).

Puno lakše i praktičnije rad s csv datotekama.

Na primjer, napravimo mali program. Obradit će csv datoteku zaposlenika OX2.ru.

Kreirajmo novu tablicu u Excelu koja sadrži sljedeća polja:

Spremimo tablicu kao csv datoteku, s razdjelnikom polja ";".

Trebali bismo završiti s ovakvom datotekom:

"Ivanov A.A."; "Programer tvrtke OX2.ru"; 89255552332 "Sidorov A.E."; "Dizajn tvrtke OX2.ru"; 89161231212 "Pirozhkov A.B."; "Umjetnički direktor OX2.ru" ;84951232121 "Kulibin B.A. ";"Upravitelj OX2.ru";89031233333

Ispod je izvorni kod s detaljnim opisom.

Kod je napisan u OOP sa koristeći klase, a uz male izmjene može se ponovno koristiti u raznim aplikacijama. Ako niste navikli programirati u nastavi, ali koristite funkcije ili nešto drugo, onda toplo preporučujemo ponovno učenje))

Kod također koristi generiranje iznimki (Exception), pročitajte o njima u našim sljedećim člancima.

_csv_datoteka = $csv_datoteka; //Puši put do datoteke u varijablu ) else ( //Ako datoteka nije pronađena, izbaci iznimku throw new Exception("Datoteka "$csv_file" nije pronađena"); ) ) javna funkcija setCSV(Array $csv) ( //Otvorite csv za prethodno snimanje, //ako navedete w, tada će informacije koje su bile u csv-u biti prebrisane $handle = fopen($this->_csv_file, "a"); foreach ($ csv kao $vrijednost) ( ​​//Prolazimo nizom // Pišemo, 3. parametar je separator polja fputcsv($handle, explode(";", $value), ";"); fclose($ handle); //Zatvori ) /** * Metoda za čitanje iz csv-datoteke. Vraća polje s podacima iz csv * @return polje; */ javna funkcija getCSV() ( $handle = fopen($this->_csv_file, "r"); //Otvori csv za čitanje $array_line_full = array(); //Polje će pohraniti podatke iz csv / /Prolazimo kroz cijelu csv datoteku i čitamo 3. razdjelnik polja parametra while (($line = fgetcsv($handle, 0, ";")) !== FALSE) ( $array_line_full = $line; //Zapiši retke u niz) fclose($handle); //Zatvori datoteku return $array_line_full; //Vrati pročitane podatke ) try ($csv = new CSV("ox2.csv"); //Otvori naš csv /** * Čitanje iz CSV-a (i izlaz na ekran u lijepom obliku) */ echo "

CSV prije snimanja:

"; $get_csv = $csv->getCSV(); foreach ($get_csv kao $vrijednost) ( ​​//Iteracija kroz retke echo "Ime: " . $vrijednost. "
"; echo "Pozicija: " . $vrijednost . "
"; echo "Telefon: " . $vrijednost . "
"; jeka "--------
"; ) /** * Zapišite nove informacije u CSV */ $arr = array("Antonov B.A.;Admin OX2.ru;89031233333", "Kolobkov V.B.;Boss OX2.ru;89162233333"); $csv->setCSV( $arr);) catch (Iznimka $e) ( //Ako csv datoteka ne postoji, ispišite poruku echo "Error: ". $e->getMessage(); ) ?>

Razred preuzima glavni rad s CSV datotekama. CSV Ima sljedeće metode:

setCSV(niz $csv)- zapisuje podatke u csv datoteku. Podaci se moraju proslijediti u nizu. Metoda može dodati csv datoteku i stvoriti novu (pročitajte opis).

metoda getCSVčita podatke iz csv datoteke i vraća dvodimenzionalni niz poput ovog:

Array ( => Array ( => Ivanov A.A. => Programer tvrtke OX2.ru => 89255552332) => Array ( => Sidorov A.E. => Dizajnerska tvrtka OX2.ru => 89161231212) => Array ( => Pirožkov A.B. => Art Director OX2.ru => 84951232121) => Array ( => Kulibin B.A. => Manager OX2.ru => 89031233333))

Primjer je prilično jednostavan, unatoč činjenici da ima dosta koda.

Uvoz podataka iz csv datoteka Bit će korisno ne samo za ažuriranje proizvoda u internetskim trgovinama, već i za učitavanje/ažuriranje bilo koje informacije na redovnoj web stranici.

Na primjer, mi razvio web stranicu društvo za upravljanje, te su bili dužni mjesečno objavljivati ​​podatke o brojilima tople i hladne vode. Svi podaci pohranjeni su u excel datotekama. I ovdje csv format savršeno odgovara!

Pritom će cijena izrade web stranice ostati nepromijenjena, a funkcionalnost i automatizacija web stranice bit će na razini višoj od one kod konkurencije.

Funkcija Fgetcsvčita redak iz datoteke i analizira podatke CSV.
polje fgetcsv(resurs $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = """ [, string $escape = "\" ]]]]) Funkcija Fgetcsv slično funkciji Fgets, s tom razlikom što analizira niz za unose u formatu CSV i vraća pronađena polja kao niz.

Parametar Ručka je važeći pokazivač datoteke na datoteku uspješno otvorenu s Fopenom, Popen ili Fsockopen.

Parametar Duljina mora biti veći od najdužeg retka (u znakovima) pronađenog u CSV datoteci (uključujući znak na kraju retka). U suprotnom, žica će biti podijeljena na dijelove Duljina znakova osim ako je prekid unutar graničnika margina ( Kućište).

Izborni parametar Razdjelnik postavlja separator polja (samo jedan znak).

Izborni parametar Kućište postavlja znak za razgraničenje polja (samo jedan znak).

Izborni parametar Pobjeći postavlja izlazni znak (samo jedan znak).

Funkcija Fgetcsv vraća indeksirani niz s pročitanim poljima, ili NULL, ako je proslijeđen pogrešan parametar Ručka, ili NETOČNO za druge pogreške, uključujući kada se dosegne kraj datoteke.

Prazan niz CSV datoteke bit će vraćen kao niz koji sadrži jedan element NULL, u ovom slučaju neće doći do greške.

Postoji mnogo tvrtki, organizacija itd. U svom radu koriste Microsoft Office ekstenziju – EXEL. U nekima se u Excelu spremaju proizvodi, u drugima podaci o proizvodima, korisnicima, cijenama ili čak samo telefonski brojevi. Može postojati potreba za prijenosom ovih podataka u drugu bazu podataka, na primjer za MREŽA.

Prvo morate otvoriti svoju datoteku Excel s produžetkom .XLS. Zatim ga spremite kao .CSV. Sada se može koristiti u web aplikacijama. Istu datoteku možete otvoriti s vašim omiljenim editorom, na primjer Totalni zapovjednik, i vidjet ćete njegov sadržaj. Ako i vi otvorite XLS datoteku, tada će biti vidljivo samo puno nečitljivog i nerazumljivog koda.

Također se može pretvoriti u CSV datoteke i tablice iz Microsoft Office I OpenOffice Writer.

Za OpenOffice Writer to se radi na sljedeći način:

1. Napravite tablicu.

2. Odaberite “Tablica” -> “Pretvori” -> “Tablica u tekst” iz izbornika.

3. Odredite razdjelnik teksta, na primjer "@" i potvrdite radnju klikom na gumb U redu.

5. Posljednje što trebate učiniti je preimenovati test.txt V test.csv.

Sada smo stvorili datoteku koja je dostupna za uvoz u PHP skriptu:
// otvori datoteku za čitanje
$fh = fopen("test.csv", "r");
// pročitati redak iz datoteke i analizirati CSV podatke
$info = fgetcsv($fh, 1000, "@");
// izlaz niza rezultata
print_r($info);
// zatvori datoteku
fclose($fh); Rezultat izvršenja bit će prvi redak tablice.

Za čitanje cijele datoteke CSV, možete koristiti while petlju:
// otvori datoteku za čitanje
$fh = fopen("test.csv", "r");

// izlaz niza rezultata
print_r($info);
}
// zatvori datoteku
fclose($fh); Kako biste pristupili svakom pojedinačnom elementu, možete koristiti jezičnu konstrukciju List:
// otvori datoteku za čitanje
$fh = fopen("test.csv", "r");
while (($info = fgetcsv($fh, 1000, "@")) !== false) (
// spremite vrijednosti niza u varijable
lista($var1, $var2) = $info;
}
// zatvori datoteku
fclose($fh); Zahvaljujući funkciji Fgetcsv Možete obraditi veliku količinu podataka iz tablica.

S problem s obradom velikih CSV datoteka u PHP-u Nedavno sam se prvi put susreo s tim. Općenito, ne programiram puno u PHP-u, samo kad se pojave zadaci da napišem nešto posebno na ovom jeziku.

U prethodnom članku raspravljano. Također sam primijetio da rad s velikim datotekama zahtijeva poseban pristup. Glavno ograničenje za uvoz velike količine podataka je vrijeme izvršavanja skripte, koje postavlja hoster (obično 30 sekundi).

Trebao sam automatizirati cijeli proces uvoza. Prije umetanja u tablicu, vrijednosti polja dobivene iz scv datoteke zahtijevaju analizu i dodatnu obradu.

Kad sam pročitao u opisu uslužnog programa BigDump (spomenuo sam ga u prethodnom članku) o principu rada:

Skripta izvršava samo mali dio ogromnog dumpa i ponovno se pokreće. Sljedeća sesija počinje tamo gdje je posljednja zaustavljena. (Prijevod: Skripta izvršava samo mali dio SQL naredbi iz datoteke i ponovno se pokreće. Sljedeći put import počinje s mjesta gdje je skripta prekinula svoj rad.)

Shvatio sam da ovo rješenje svakako moram isprobati. Potrage na internetu za nečim sličnim završile su uspješno.

$file_name = $_GET["put"];

$conn = mysql_connect("localhost", "username", "pass")
or die("Veza nije uspostavljena!");
@mysql_select_db("db_name") ili die("Veza nije uspostavljena!");

if (($handle_f = fopen($file_name, "r")) !== FALSE)
{
// provjerava je li potrebno nastaviti uvoz s određenog mjesta
// ako da, tada se pokazivač pomiče na ovo mjesto
if(isset($_GET["ftell"]))(
fseek($handle_f,$_GET["ftell"]);
}
$i=0;
if(isset($_GET["x"]))(
$x=$_GET["x"];
) inače (
$x = 0;
}

// red po red čitanje i raščlanjivanje redaka iz datoteke
while (($data_f = fgetcsv($handle_f, 1000, ";"))!== FALSE) (
$insert_q = "umetni u vrijednosti temp1 (code,contract,price,amount,dat_time,is_op)".
" (\"".$data_f."\",\"".$data_f."\",\"".$data_f."\",\"".$data_f."\",\"". $podaci_f."\",\"0\"");
@mysql_query($insert_q);

If(!strstr($i/5000,""))(
print "Uvoz zapisa #: ".$x."
";
ispiranje();
ob_ispiranje();
}

Ako($i==20000)(
ispis" ";
Izlaz;
}
$x++;
$i++;

Fclose($handle_f);
) else ($err = 1; echo "Neuspješno otvaranje datoteke";)

Prilikom pozivanja skripte, parametar staze sadrži stazu do datoteke iz koje se uvozi. Skripta uvozi određeni broj redaka (u primjeru - 20.000), nakon čega se sama ponovno pokreće s parametrima među kojima se osim naziva datoteke prosljeđuje i pokazivač na mjesto s kojeg se nastavlja uvoz (ftell).

Testirao sam ovu skriptu na datoteci od 60 Mb. Radilo je ispravno i sve je uvezlo. Ali ipak bih želio smanjiti vrijeme rada.

U istoj temi foruma iz koje sam ukrao ovo rješenje raspravljalo se o tome da možete ubrzati rad skripte prilikom uvoza podataka u bazu tako da pojedinačne umetke zamijenite grupnim.

Naredba INSERT pomoću VALUES može se koristiti za umetanje više redaka odjednom. Da biste to učinili, navedite skupove vrijednosti koje trebate umetnuti. Primjer:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);


Nakon što sam skriptu nadogradio na grupno umetanje, zapravo sam dobio rezultat koji je bio prikladniji u smislu izvedbe. Ali mislim da je prerano tu stati, nastavit ću tražiti.

Bilo bi nepošteno ignorirati maxnagov komentar na prethodni post i ne spomenuti tu mogućnost

Tražio sam istu stvar bez korištenja neke nepodržane PHP klase. Excel CSV ne koristi uvijek navodnike za razdvajanje i izbjegava navodnike koji koriste "" jer je algoritam vjerojatno vratio 80 ili nešto slično. Nakon što sam pogledao nekoliko .csv parsera u odjeljku komentara na PHP.NET-u, vidio sam one koji su čak koristili povratne pozive ili eval"d kod i oni ili nisu radili prema potrebi ili jednostavno nisu radili uopće. Pa sam napisao jedan za mene njihove rutine, a one rade u najosnovnijoj konfiguraciji PHP-a. Ključevi polja mogu biti ili numerički ili imenovani kao polja navedena u naslovnom retku.

Funkcija SW_ImplodeCSV(array $rows, $headerrow=true, $mode="EXCEL", $fmt="2D_FIELDNAME_ARRAY") // SW_ImplodeCSV - vraća 2D niz kao niz od csv (MS Excel .CSV podržan) // AUTOR: [e-mail zaštićen]// OBJAVLJENO: 9/21/13 BETA ( $r=1; $row=array(); $fields=array(); $csv=""; $escapes=array("\r", "\n" , "\t", "\\", "\""); //dvobajtni izlazni kodovi $escapes2=niz("\r", "\n", "\t", "\\", "\ ""); //stvarni kod if($mode=="EXCEL")// izlazni kod = "" ( $delim=","; $enclos="""; $rowbr="\r\n"; ) else //mode=STANDARDNO sva polja zatvorena ( $delim=","; $enclos="""; $rowbr="\r\n"; ) $csv=""; $i=-1; $i2 =0; $imax=count($rows); while($i< $imax) { // get field names if($i == -1) { $row=$rows; if($fmt=="2D_FIELDNAME_ARRAY") { $i2=0; $i2max=count($row); while(list($k, $v) = each($row)) { $fields[$i2]=$k; $i2++; } } else //if($fmt="2D_NUMBERED_ARRAY") { $i2=0; $i2max=(count($rows)); while($i2<$i2max) { $fields[$i2]=$i2; $i2++; } } if($headerrow==true) { $row=$fields; } else { $i=0; $row=$rows;} } else { $row=$rows[$i]; } $i2=0; $i2max=count($row); while($i2 < $i2max)// numeric loop (order really matters here) //while(list($k, $v) = each($row)) { if($i2 != 0) $csv=$csv.$delim; $v=$row[$fields[$i2]]; if($mode=="EXCEL") //EXCEL 2quote escapes { $newv = """.(str_replace(""", """", $v))."""; } else //STANDARD { $newv = """.(str_replace($escapes2, $escapes, $v))."""; } $csv=$csv.$newv; $i2++; } $csv=$csv."\r\n"; $i++; } return $csv; } function SW_ExplodeCSV($csv, $headerrow=true, $mode="EXCEL", $fmt="2D_FIELDNAME_ARRAY") { // SW_ExplodeCSV - parses CSV into 2D array(MS Excel .CSV supported) // AUTHOR: [e-mail zaštićen]// OBJAVLJENO: 9/21/13 BETA //SWMessage("SW_ExplodeCSV() - POZIVA SE OVDJE -"); $rows=array(); $row=array(); $fields=array();// rows = niz nizova //escape kod = "\" $escapes=array("\r", "\n", "\t", "\\", "\" "); //dvobajtni kodovi za izlaz $escapes2=array("\r", "\n", "\t", "\\", "\""); //stvarni kod if($mode=="EXCEL") (// izlazni kod = "" $delim=","; $enclos="""; $esc_enclos=""""; $rowbr="\r \n"; ) else //mode=STANDARD (// sva polja zatvorena $delim=","; $enclos="""; $rowbr="\r\n"; ) $indxf=0; $indxl=0; $encindxf=0; $encindxl=0; $enc=0; $enc1=0; $enc2=0; $brk1=0; $rowindxf=0; $rowindxl=0; $encflg=0; $rowcnt=0; $colcnt=0; $rowflg=0; $colflg=0; $cell=""; $headerflg=0; $quotedflg=0; $i=0; $i2=0; $imax=strlen($csv); dok ($indxf< $imax) { //find first *possible* cell delimiters $indxl=strpos($csv, $delim, $indxf); if($indxl===false) { $indxl=$imax; } $encindxf=strpos($csv, $enclos, $indxf); if($encindxf===false) { $encindxf=$imax; }//first open quote $rowindxl=strpos($csv, $rowbr, $indxf); if($rowindxl===false) { $rowindxl=$imax; } if(($encindxf>$indxl)||($encindxf>$rowindxl)) ( $quoteflg=0; $encindxf=$imax; $encindxl=$imax; if($rowindxl<$indxl) { $indxl=$rowindxl; $rowflg=1; } } else { //find cell enclosure area (and real cell delimiter) $quoteflg=1; $enc=$encindxf; while($enc<$indxl) //$enc = next open quote {// loop till unquoted delim. is found $enc=strpos($csv, $enclos, $enc+1); if($enc===false) { $enc=$imax; }//close quote $encindxl=$enc; //last close quote $indxl=strpos($csv, $delim, $enc+1); if($indxl===false) { $indxl=$imax; }//last delim. $enc=strpos($csv, $enclos, $enc+1); if($enc===false) { $enc=$imax; }//open quote if(($indxl==$imax)||($enc==$imax)) break; } $rowindxl=strpos($csv, $rowbr, $enc+1); if($rowindxl===false) { $rowindxl=$imax; } if($rowindxl<$indxl) { $indxl=$rowindxl; $rowflg=1; } } if($quoteflg==0) { //no enclosured content - take as is $colflg=1; //get cell // $cell=substr($csv, $indxf, ($indxl-$indxf)-1); $cell=substr($csv, $indxf, ($indxl-$indxf)); } else// if($rowindxl >$encindxf) ( // okružena ćelijom $colflg=1; //dohvaćanje ćelije - dekodiranje sadržaja ćelije $cell=substr($csv, $encindxf+1, ($encindxl-$encindxf)-1); if($mode= = "EXCEL") //ukloni EXCEL 2escape escape ($cell=str_replace($esc_enclos, $enclos, $cell); ) else //ukloni STANDARD esc. shemu ($cell=str_replace($escapes, $escapes2, $cell ); ) ) if($colflg) (// čitanje ćelije u niz if(($fmt=="2D_FIELDNAME_ARRAY") && ($headerflg==1)) ( $row[$fields[$colcnt]]=$cell ; ) else if(($fmt=="2D_NUMBERED_ARRAY")||($headerflg==0)) ( $row[$colcnt]=$cell; ) //$rows[$rowcnt][$colcnt] = $ $colcnt++; $indxf=$indxl+1;//strlen($rowflg) (// čitanje reda u veliki niz if($headerrow) && ($headerflg= =0)) ( $fields=$row; $row=array(); $headerflg=1; ) else ( $rows[$rowcnt]=$row; $row=array(); $rowcnt++; ) $colcnt= 0; $cell=""; $rowindxf=$rowindxl+2;//strlen($rowbr); //SWMessage("SW_ExplodeCSV() - colcnt = ".$colcnt." rowcnt = ".$rowcnt." indxf = ".$indxf." indxl = ".$indxl." rowindxf = ".$rowindxf); //if($i>20) break; ) vrati $redova; )

Bob se sada može vratiti svojim govorima

10948|Knjiga|Tip1

SHA512||0||10948

0|10948|SHA512|

Voljela bih da je ovako

C3884fbd7fc122b5273262b7a0398e63|SHA512|Tip 1|Knjiga

Nemam pristup stvarnoj bazi podataka, postoji li način da to učinim? U osnovi traži $id = $file1; if($file3 == $id) $id = $file1; if($file3 == $id) ili nešto još učinkovitije.

Svaka CSV datoteka nalazi se bilo gdje od 100 do 300 tisuća redaka. Nije me briga ako će potrajati, mogu samo pustiti da neko vrijeme radi na EC2.

$podaci = polje(); $fh = fopen("file1") ili die("Nije moguće otvoriti datoteku1"); while(list($id, $val1, $val2) = fgetcsv($fh, 0, "|")) ( $data[$id]["val1"] = $val1; $data[$id][" val2"] = $val2; ) fclose($fh); $fh = fopen("file2") ili die("Nije moguće otvoriti datoteku2"); while(list($method, null, null, null, $id) = fgetcsv($fh, 0, "|")) ( $data[$id]["method"] = $metoda; ) fclose($fh ); $fh = fopen("file3") ili die("Nije moguće otvoriti datoteku3"); while(list(null, $id, null, $hash) = fgetcsv($fh, 0, "|")) ( $data[$id]["hash"] = $hash; ) fclose($fh);

Neophodno je, ali morate dobiti niz s podacima koje želite. Ispisivanje kao još jedan csv ostavljeno je kao vježba za čitatelja (savjet: pogledajte fputcsv()).

Sve tri datoteke imaju zajedničko polje (tj. u vašem primjeru, "10948" je bio zajednički svim trima recima). Ako niste zabrinuti zbog korištenja puno memorije, možete učitati sve tri datoteke u drugom nizu postavljanjem zajedničkog polja kao ključa niza i korištenjem foreach petlje za prikupljanje sve tri.

Na primjer:

$rezultat = polje(); // Datoteka 1 $fh = fopen("datoteka1"); while (($data = fgetcsv($fh, 0, "|")) !== FALSE) $rezultat[$data] = $data; fclose($fh); // Datoteka 2 $fh = fopen("file2") while (($data = fgetcsv($fh, 0, "|")) !== FALSE) $result[$data] = array_merge($result[$data ], $podaci); fclose($fh); // Datoteka 3 $fh = fopen("file3") while (($data = fgetcsv($fh, 0, "|")) !== FALSE) $result[$data] = array_merge($result[$data ], $podaci); fclose($fh);

Predlažem sortiranje spajanjem koristeći osnovne unix alate:
a) sortirati .CSV datoteke po stupcima zajedničkim za svaku datoteku, sortirati -d "" -K? -DO? -DO?
b) Korištenje unix naredbe "join" za popis zapisa koji se dijele između parova .CSV datoteka. Naredba "join" radi samo na dvije datoteke odjednom, tako da ćete morati "ulančati" rezultate kroz više izvora podataka:

# gdje je "x" broj polja iz datoteke A, a "y" je broj polja iz datoteke B sort -kx "fileA" sort -ky "fileB" join -1x -2y "fileA" "fileB" > file1 sort -kx "fileC" join -1x -2y "file1" "fileC" > file2 sort -kx "fileD" join -1x -2y "file2" "fileD" > file3 itd...

Vrlo je brz i omogućuje vam filtriranje vaših .CSV datoteka kao da postoji improvizirana veza s bazom podataka.

Ako trebate napisati vlastitu metodu sortiranja spajanjem u php-u: (Pročitajte ovdje: Sortiranje spajanjem)

Najjednostavnija implementacija za spajanje .CSV datoteka je proces u dva koraka: a) unix razvrstava vaše datoteke, zatim B) paralelno "spaja" sve izvore, čitajući zapis iz svakog, tražeći slučaj u kojem je vaša vrijednost u vašoj zajedničkoj polja odgovara svim drugim izvorima (JOIN u terminologiji baze podataka):
pravilo 1) Preskoči unos koji je manji (<) ВСЕХ других источников.
pravilo 2) Kada je ukupna vrijednost zapisa jednaka (==), svi ostali izvori imaju podudaranje.
pravilo 3) Kada je ukupna vrijednost unosa (==), NEKI iz drugog izvora, možete koristiti "LEFT-JOIN" logiku ako želite, inače preskočite taj unos iz svih izvora.

Pseudokod za spajanje više datoteka

Čitanje 1. zapisa iz svakog izvora podataka; dok "zapis postoji iz svih izvora podataka"; učiniti za A u svakom izvoru podataka; postavite cntMissMatch=0 za B u svakom izvoru podataka; učiniti ako A.polje< B.field then cntMissMatch+=1 end if end for if cntMissMatch == count(Data-Sources) then # found record with lowest values, skip it read next record in current Data-source; break; # start over again looking for lowest else if cntMissMatch == 0 then we have a match, process this record; read in next record from ALL data-sources ; break; # start over again looking for lowest else # we have a partial match, you can choose to have # "LEFT-JOIN" logic at this point if you choose, # where records are spit out even if they do NOT # match to ALL data-sources. end if end if end for done

Nadam se da ovo pomaže.



reci prijateljima
Pročitajte također