Probleme cu un fisier si vector.

Ai o întrebare legată de PHP? Incercăm să îi găsim soluţie. Sau poate doar vrei să publici un cod interesant.

Moderatori: Zamolxe, Moderatori

Valmotor2
PHPRomania Supporter
Mesaje: 11
Membru din: Dum Sep 04, 2011 9:03 pm

Probleme cu un fisier si vector.

Mesajde Valmotor2 » Dum Sep 04, 2011 9:12 pm

Bun, pentru inceput, sunt bucuros ca v-am gasit.

Am o problema legat de un script al meu.
Am un fisier de tip CSV(va sa fie ) dar nu e, ii zic de tip txt, care are blocuri, ceva de genu mai jos:

users // reprezinta numele tabelei (primul bloc)
;valentin;marian;parola;email // ENTER
;Gigi;Bojan;parola1;email2
// LINIE GOALA
contact //alt bloc (alt tabel)
1;text;text;
2;start;text1;
3;coment;coment;


Aceste este un exemplu, realitatea este ca fisiere de tipul acesta care are cel putin 1000 de linii care trebuiesc in functie de numele tabelei sa fie bagat in mysql.

Codul php:

function executa($file){
handle($file, 'r');
while(!feof($handle)){
$buffer = fgets($handle, 4096);
}
$tmps = array();
$contents = explode("\r", $buffer);
foreach($contents as $key =>$content){
$tmps[] = explode(";",$content);
}

for($i = 0; $i < count($tmps); $i++){
if($tmps[$i] == "users"){
echo $tmps[$i];
}
}
}


Problema mea este ca nu reusesc sa compar string cu string ... si ma oftica la maxim chestia asta. Cum pot rezolva situatia asta ?


Va multumesc pentru timpul acordat.
Daca se poate as vrea si cateva tutoriale de genu acesta sa imi dau seama de greseala mea.



Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Dum Sep 04, 2011 11:57 pm

e simplu le iei din text si le pui intr-o baza de date.
Pe langa faptul ca va fi si mult mai rapid, vei putea face si mult mai multe operatii.

Stupid thing 1: sa tii user + parola in fisier text
Stupid thing 2: "fisiere.. care are cel putin" - dezacord grav :)

Ca sa le compari faci un array cu ele care are o cheie cunoscuta (in loc de $tmps[] sa pui $tmps[md5(mail_ce_presupunem_ca_e_unic)]), ca sa ai ce compara. Acum, depinde ce vrei sa faci... la un login, ar trebui sa pui in foreach-ul ala o conditionare de genul
if user == user din csv si parola == parola din csv
ca sa nu parcurgi de 2 ori un array mare (repet, iti recomand baza de date, pentru ca exact asta e scopul ei)

Valmotor2
PHPRomania Supporter
Mesaje: 11
Membru din: Dum Sep 04, 2011 9:03 pm

Mesajde Valmotor2 » Lun Sep 05, 2011 2:46 pm


Valmotor2
PHPRomania Supporter
Mesaje: 11
Membru din: Dum Sep 04, 2011 9:03 pm

Mesajde Valmotor2 » Lun Sep 05, 2011 9:48 pm

Nu pot sa inteleg cum o chestie asa de simpla nu functioneaza.

deci:

$tbl = array('rata','vaca','soarece');

iau informatii din fisier.

$handle = fopen($file, 'r');

while(!feof($handle)){
$buffer = fgets($handle);
}

$contents = explode("/r", $buffer); // asta se face array

// si problema e aici, asta e un caz simplu
// si nu imi pot explica, in fisier am un cuvant, pe fiecare rand, 'rata', 'vaca' sau 'soarece'
// si incerc sa verific.

// acum urmeaza cazu simplu si unde e problema mea

if(trim($contents[0] == 'rata'){
echo $contents[0]; //nu imi afiseaza nimic, dar sunt 3 randuri care au cuvantul asta. doar atat.

//daca incerc alta abordare

if(is_string($contents[0])){
echo 'Este'; // aici merge .. dar pe mine ma intereseaza partea de sus , cum compar randul din fisier, defapt in cazul de mai sus :(.
}
}

Avatar utilizator
vectorialpx
Senior Member
Mesaje: 4832
Membru din: Mar Mar 01, 2005 9:48 am
Localitate: Bucuresti
Contact:

Mesajde vectorialpx » Lun Sep 05, 2011 10:49 pm


Valmotor2
PHPRomania Supporter
Mesaje: 11
Membru din: Dum Sep 04, 2011 9:03 pm

Mesajde Valmotor2 » Mar Sep 06, 2011 11:20 am


Valmotor2
PHPRomania Supporter
Mesaje: 11
Membru din: Dum Sep 04, 2011 9:03 pm

Mesajde Valmotor2 » Joi Sep 15, 2011 2:03 am

Bun, revin cu alta problema ...
Am extras informatiile dintr-un fisier, am prelucrat dar am constantat ca am un mic bug ...

acum informatiile sunt ca fiecare rand e un vector, ceva e genu acesta:

[0] numeTabela
[1] Informatii de la numeTabela
[2] Informatii de la numeTabela
[3] Informatii de la numeTabela
[4]
[5] altNumeTabela
[6] Informatii de la altNumeTabela
[7]
[8] altTabel
[9] Informatii din altTabel
[10]Informatii din altTabel


problema mea este ca nu resesc sa citesc ultimul tabel si apoi informatiile ei. Toate astea vin dintr-un array, printr-un foreach, ceva de genu mai jos:

foreach($cont as $row) {
if(trim($row) !== ''){
$cmos .= trim($row).'<br />';
} else {
$cmos .= trim($row);
proceseaza($cmos);
$cmos = '';
}
}

partea asta de cod, stiu ca am gresit undeva dar nu pot sa imi dau seama, sau cel putin nu am idee cum sa citesc pana la ultimul rand.
Ce imi trebuie mie e ca randul acela liber imi spune ca s-a terminat tabelul curent si informatiile ei si a e timpu ca urmeaza alt tabel cu alte informatii sau nu.

Problema mea este ca nu pot sa procesez ultimul tabel cu informatiile ei,pentru ca nu stiu cum sa interpretez problema.


Ce am facut eu mai sus, imi cmos-ul informatiile astea:

1.
[0] numeTabela
[1] Informatii de la numeTabela
[2] Informatii de la numeTabela
[3] Informatii de la numeTabela

2.
[5] altNumeTabela
[6] Informatii de la altNumeTabela

----
Ratand si ultimul tabel cu informatiile astea, cum repar "bugul asta"sau o idee?
Scuzele mele ... sunt la inceput si eu .


Înapoi la “Cod PHP”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 21 vizitatori