Dva txt fajla - uporedjivanje

1

Dva txt fajla - uporedjivanje

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Pozdrav svima, nisam bio dugo hehe a sad mi zapelo nesto i nikako ne mogu da konstruisem u glavi kako to da uradim. Radi se o dva tekstualna fajla koja treba da uporedim. Primer:
Prvi fajl:
0100:000000 "Seca Issuer" 0100:00ffff "Sky Italy Fake ID`s" 0100:000001 "S1-Seca Unknown" 0100:000002 "Orbit (Old) (8W/26E)" 0100:000003 "S1-Canal+ France (Old) (19E)" 0100:000004 "S1-CSN France (Old) (19E)" 0100:000005 "Stream (Old) (13E)" 0100:000009 "S1-CSN/TPS (Old) (13E)" 0100:00000a "Prova (13E)" 0100:00000b "Premiere (Old) (19E)" 0100:00000c "S1-CSD Espana (Old) (19E)" 0100:00000d "S1-TVB Superchannel (Old) (19E)" 0100:00000e "S1-Canal+ Horizons (Old)" 0100:00000f "S1-AB Sat/Cinestar (Old) (13E)" 0100:000010 "S1-Telepiu/D+ (Old) (13E)" 0100:000011 "S1-Calcio+ (Old)(13E)" 0100:000012 "S1-Pro Tv , Equida (Old) (19E)"
Drugi file:
0100:00ffff "Sky Italy Fake ID`s" 0100:000001 "S1-Seca Unknown" 0100:000002 "Orbit (Old) (8W/26E)" 0100:000003 "S1-Canal+ France (Old) (19E)" 0100:000004 "S1-CSN France (Old) (19E)" 0100:000005 "Stream (Old) (13E)" 0100:000009 "S1-CSN/TPS (Old) (13E)" 0100:00000a "Prova (13E)" 0100:00000b "Premiere (Old) (19E)"
Znaci sad treba da uporedim ta dva fajla i da skripta izbaci iz prvog fajla sve sto ima u drugom fajlu, i da prikaze ostatak. Znaci kao neki search replace script posto radim na nekom projektu i sve je u nizovima dok mi je ovo samo za primer. Hvala svima ko zeli da pomogne



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

To bi islo otprilike ovako:

prvo sa file() ucitas drugi fajl u neki niz (obrati paznju da koristis flag-ove zbog izbacivanja new line i empty line.

Onda, ucitavas jedan po jedan red prvog fajla (fopen(), fread(), fclose()) i sa in_array() proveravas da li te linije ima u drugom nizu.

Ako nema, jedan echo stampa taj red Smile



offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Ajde molim te ako hoces kad uhvatis vremena jedan example, stao mi mozak ne mogu nikako da iskonstruisem, pozz i hvala

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

A sto ne probas da se potrudis sam, krenes sa nekim kodom, pa da te ispravimo ako negde pogresis? Tako ces nesto i nauciti, ako ti neko non - stop daje gotov kod - tesko.

Inace, kod za ovako nesto ima ukupno 9 linija. I sve mozes da ih pokupis sa linkova koje sam ti dao Wink

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Joj pa da znam kako nebi pitao nikog, ok evo da pocnem ali nista nisam uradio jer ne znam kako to da izvedem

<?php $rr = file('data3'); $filename = "data4.txt"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); if (!in_array($contents, $rr))  echo $contents; fclose($handle); ?>

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Na dobrom si putu Smile samo sto ovo nece da radi Smile

Glavna greska je u drugom delu, gde ucitavas drugi niz (a ti u stvari ceo fajl smestas u string), jer je jedini slucaj kad ces mozda imati poklapanje je da se drugi fajl sadrzi od samo jedne linije Wink

Pogledaj u manualu za fread() funkciju, i obrati paznju kako se koristi f-ja feof() u kombinaciji sa while i fread() Wink

A da budes siguran da nemas niti empty line niti new line, funkciju file() koristis ovako:

$rr = file('data3', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

ne kontam kako se radi sa in_array jer ne mogu logiku nikako da uradim, a tu mi je najveci problem. Ako stavim !in_array onda ne prikaze nista. To da je sa !strstr pa bi vec moglo da se prica. Primer
$rr = file('data3.txt'); foreach($rr as $linija) { if(!strstr($linija, '0100:000000 "Seca Issuer"')) echo $linija; }
Kontam ja da je prvi fajl u nizu a drugi u stringu, i da treba da citam red po red od drugog fajla i da ga uporedjujem u nizovima prvog fajla ali ne kontam kako. Ako hoces pomozi ako neces tvoja stvar, ja sam te zamolio ko coveka da mi pomognes jednim examplom a ne ovako da radim neke domace zadatke. Ja da sam znao procitati na php.net kako nebi dosao ovde jbg

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Daj coveku ribu, nahranices ga za jedan dan. Nauci ga da peca, i bice sit ceo zivot.

<?php    $f1 = file('putanja/do/prvog/fajla', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);    $f2 = fopen('putanja/do/drugog/fajla','r');    while (!feof($f2)) {       $r = fread($f2,1024);       if (in_array($r,$f1) and !empty($r)) {          echo $f1 . "\n";       }    }    fclose($f2); ?>

offline
  • Pridružio: 15 Jul 2009
  • Poruke: 150

Napisano: 27 Apr 2010 11:49

Nismo se mi razumeli izgleda a i ovo sto si okacio ne fercera jer je $f1 u nizu a ne u stringu. Meni treba primer skripte koja ce da uporedi drugi fajl sa prvim fajlom, i da prikaze samo ono iz "prvog fajla" a sto nema u drugom fajlu ako me razumes. Znaci ovo iz drugog fajla ako ima u prvom fajlu ce da preskoci i da prikaze samo ono sto nema. Tu logiku ne mogu da skontam kako da uradim

Dopuna: 27 Apr 2010 12:26

Otprilike ovako, mada ne kontam zasto logika ne preskace ove linije iz drugog fajla
<?php   $f1 = file('prvi.txt', FILE_IGNORE_NEW_LINES || FILE_SKIP_EMPTY_LINES); $f2 = fopen('drugi.txt','r'); while (!feof($f2)) {     $r = fread($f2,1024);     foreach ($f1 as $f3)     {         if (!in_array($r, $f1) && !empty($r)) echo $f3 . "\n";     } } fclose($f2);   ?>

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3747
  • Gde živiš: 127.0.0.1

Okej, onda ide obrnuto Smile

<?php    $f1 = file('putanja/do/drugog/fajla', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);    //ceo drugi fajl smestis u niz, zbog f-je in_array()    $f2 = fopen('putanja/do/prvog/fajla','r');    //otvoris prvi fajl    while (!feof($f2)) {    //dok ne stigne do kraja fajla       $r = fread($f2,1024);       //procitaj jednu liniju fajla       if (!in_array($r,$f1) and !empty($r)) {       //ako te linije NEMA u drugom fajlu, i nije blanko linija          echo $f1 . "\n";          //odstampaj tu liniju :)       }       //prelazis na sledecu liniju    }    fclose($f2);    //zatvori fajl ?>

Ko je trenutno na forumu
 

Ukupno su 1174 korisnika na forumu :: 41 registrovanih, 8 sakrivenih i 1125 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Apok, bankulen, bokisha253, Boris BM, ccoogg123, darkangel, Dimitrise93, dragoljub11987, drimer, esx66, Frunze, galerija, gomago, goxin, HogarStrashni, Karla, kokodakalo, Krvava Devetka, kunktator, laganini123, Marko Marković, Metanoja, milenko crazy north, Milometer, moldway, nemkea71, Nobunaga, radoznao, repac, RJ, sevenino, Sirius, slonic_tonic, stalja, Trpe Grozni, uruk, Vlada1389, vladulns, wizzardone, Zoca