Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z wyrażeniem IF
new_user
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 20.02.2007

Ostrzeżenie: (0%)
-----


Mam taki kod:
  1. <?php
  2. while(!feof($plik_txt)) {
  3. $linia = fgets($plik_txt,255);
  4. if (eregi("^[a-zA-Z0-9]",$linia)) {
  5.  $rekord = split(";",$linia);
  6. if ((!eregi($rekord[0],$wiersz[0])) and (!eregi($rekord[1],$wiersz[1]))){
  7. $wiersz[2] = str_replace("=", "=OD", $wiersz[2]);
  8. $wiersz[3] = str_replace("=", "=OD", $wiersz[3]);
  9. $gen_xml .= "\t\t<row>\n";
  10. $gen_xml .= "\t\t\t<column name=\"2\">".$wiersz[2]."</column>\n";
  11. $gen_xml .= "\t\t\t<column name=\"3\">".$wiersz[3]."</column>\n";
  12. $gen_xml .= "\t\t\t<column name=\"4\">".$wiersz[4]."</column>\n";
  13. $gen_xml .= "\t\t\t<column name=\"5\">".$wiersz[5]."</column>\n";
  14. $gen_xml .= "\t\t\t<column name=\"6\">".$wiersz[6]."</column>\n";
  15. $gen_xml .= "\t\t</row>\n";
  16. }
  17. }
  18. ?>

Mam dwa takie kawałki kodu jeden z !eregi a drugi z samym eregi i ten bez ! działa bez zarzutu natomiast ten drugi z ! zwraca mi tak jakby wyniki wszystkie i te spelniające warunek i te nie spełniające warunku.
Bardzo proszę o pomoc

Ten post edytował new_user 4.04.2008, 07:01:26
Go to the top of the page
+Quote Post
JoShiMa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


A jak się wprowadza zaprzeczenie, to nie powinno być or zamiast and ?

Jednym słowem warunek przeciwny do takiego:
  1. <?php
  2. (eregi($rekord[0],$wiersz[0])) and (eregi($rekord[1],$wiersz[1]))
  3. ?>


wygląda tak:
  1. <?php
  2. !(eregi($rekord[0],$wiersz[0])) and (eregi($rekord[1],$wiersz[1]))
  3. ?>


lub tak:
  1. <?php
  2. (!eregi($rekord[0],$wiersz[0])) or (!eregi($rekord[1],$wiersz[1]))
  3. ?>


Mam nadzieję, że to jest odpowiedź na Twoje pytanie.
Go to the top of the page
+Quote Post
new_user
post
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 20.02.2007

Ostrzeżenie: (0%)
-----


NIe wiem czemu ale wyniki mam inne niż powinny być.
Jak skasuje ! (wykrzyknik) przed eregi to wyniki mam poprawne a jak zastosuje negacje to niestety nie a potrzebuje wyniki odwrotne do uzyskanych bez negacji
Go to the top of the page
+Quote Post
JoShiMa
post
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


No przecież napisałam Ci jak to trzeba zrobić, żeby było odwrotnie.

  1. <?php
  2. !(p and q) <=> !p or !q
  3. ?>
Go to the top of the page
+Quote Post
new_user
post
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 20.02.2007

Ostrzeżenie: (0%)
-----


Właśnie zastosowałem to co napisałeś:
  1. <?php
  2. !(eregi($rekord[0],$wiersz[0])) and (eregi($rekord[1],$wiersz[1]))
  3. ?>


i teraz mam tak:
  1. <?php
  2. while(!feof($plik_txt)) {
  3. $linia = fgets($plik_txt,255);
  4. if (eregi("^[a-zA-Z0-9]",$linia)) {
  5.  $rekord = split(";",$linia);
  6. if (!(eregi($rekord[0],$wiersz[0])) and (eregi($rekord[1],$wiersz[1]))){
  7. $wiersz[2] = str_replace("=", "=OD", $wiersz[2]);
  8. $wiersz[3] = str_replace("=", "=OD", $wiersz[3]);
  9. $gen_xml .= "\t\t<row>\n";
  10. $gen_xml .= "\t\t\t<column name=\"2\">".$wiersz[2]."</column>\n";
  11. $gen_xml .= "\t\t\t<column name=\"3\">".$wiersz[3]."</column>\n";
  12. $gen_xml .= "\t\t\t<column name=\"4\">".$wiersz[4]."</column>\n";
  13. $gen_xml .= "\t\t\t<column name=\"5\">".$wiersz[5]."</column>\n";
  14. $gen_xml .= "\t\t\t<column name=\"6\">".$wiersz[6]."</column>\n";
  15. $gen_xml .= "\t\t</row>\n";
  16. }
  17. }
  18. ?>


Niestety dziwne wyniki mam.
A mam taki plik TXT:
  1. 11111;
  2. 22222;

i chcialbym zeby w tej petli byly pomijane rekordy z tymi liniami, żeby były tylko wypluwane rekordy ktore nie istnieja w tym pliku.
Próbowałem nawet zrobić w taki sposób:
i teraz mam tak:
  1. <?php
  2. while(!feof($plik_txt)) {
  3. $linia = fgets($plik_txt,255);
  4. if (eregi("^[a-zA-Z0-9]",$linia)) {
  5.  $rekord = split(";",$linia);
  6. if (!($rekord[0]==$wiersz[1])){
  7. $wiersz[2] = str_replace("=", "=OD", $wiersz[2]);
  8. $wiersz[3] = str_replace("=", "=OD", $wiersz[3]);
  9. $gen_xml .= "\t\t<row>\n";
  10. $gen_xml .= "\t\t\t<column name=\"2\">".$wiersz[2]."</column>\n";
  11. $gen_xml .= "\t\t\t<column name=\"3\">".$wiersz[3]."</column>\n";
  12. $gen_xml .= "\t\t\t<column name=\"4\">".$wiersz[4]."</column>\n";
  13. $gen_xml .= "\t\t\t<column name=\"5\">".$wiersz[5]."</column>\n";
  14. $gen_xml .= "\t\t\t<column name=\"6\">".$wiersz[6]."</column>\n";
  15. $gen_xml .= "\t\t</row>\n";
  16. }
  17. }
  18. ?>

też nie pomogło i wypluwa rekordy które znajdują się w pliku.

Ten post edytował new_user 4.04.2008, 11:29:23
Go to the top of the page
+Quote Post
JoShiMa
post
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(new_user @ 4.04.2008, 10:07:58 ) *
Właśnie zastosowałem to co napisałeś:
  1. <?php
  2. !(eregi($rekord[0],$wiersz[0])) and (eregi($rekord[1],$wiersz[1]))
  3. ?>


Oj bo się nie przyjrzałeś tylko kopiujesz na pałę. Zaprzeczenie ma być przed całym wyrażeniem a więc tak:
  1. <?php
  2. !((eregi($rekord[0],$wiersz[0])) and (eregi($rekord[1],$wiersz[1])))
  3. ?>


Lub inaczej tak:

  1. <?php
  2. !(eregi($rekord[0],$wiersz[0])) or !(eregi($rekord[1],$wiersz[1]))
  3. ?>


Weź poucz się trochę o wyrażeniach logicznych.
Go to the top of the page
+Quote Post
new_user
post
Post #7





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 20.02.2007

Ostrzeżenie: (0%)
-----


Właśnie proboje na różne sposoby i niestety coś mi nie wychodzi (zamotałem sie i nie mogę z tego wybrnąć).
Teraz mam tak i nadal mam ten sam problem:
  1. <?php
  2. if (!((eregi($rekord[0],$wiersz[0])) and
  3. (eregi($rekord[1],$wiersz[1])))){
  4. ?>

teraz zaprzeczenie jest przed całym wyrażeniem.

Ten post edytował new_user 4.04.2008, 12:16:01
Go to the top of the page
+Quote Post
JoShiMa
post
Post #8





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


A jak powstaje i jakie wartości ma tablica wiersz?
Go to the top of the page
+Quote Post
new_user
post
Post #9





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 20.02.2007

Ostrzeżenie: (0%)
-----


Tablica wiersz ma wartosci poprawne.
Tzn w pliku txt mam takie wartosci:
parametr1;parametr2;
parametr3;parametr4;
i tablica wiersz zwraca mi poprawne:
$wiersz[0] = parametr1
$wiersz[1] = parametr2
i tak dla kazdego wiersza.
Dziwne jest to ze dla takigo warunku
if ((eregi($rekord[0],$wiersz[0])) and (eregi($rekord[1],$wiersz[1]))){
działanie skryptu jest OK ale dla takiego
if (!((eregi($rekord[0],$wiersz[0])) and(eregi($rekord[1],$wiersz[1])))){
już nie w wyniku tego warunku mam rekordy które są w pierwszym wyniku a nie powinno być ich tam.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.09.2025 - 16:18