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 854 korisnika na forumu :: 3 registrovanih, 1 sakriven i 850 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: ALBION101, MilosKop, Shilok