Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Podmiana danych w pliku, Problem z podmianą indeksów tablicy
TwojPan
post
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 13.08.2013

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


Witam,
Ju opisuje problem

Mam plik ktory wywoluje do tablicy. W srodku jest tak:

  1. pierwszy index o||14a||14b||28a


Mam pole select z dwoma polami: 14 i 28.

Probem w tym ze w pliku moze byc jak powyzej lub te dane mogą być różne tj:

14a,14b,14c,28a,28b,28c i byc w roznych miejscach pomiedzy separatorem ||

np. tak

  1. pierwszy index o||28b||14c


  1. pierwszy index o||14c||14c||28b


  1. pierwszy index o||14a


  1. pierwszy index o||14a||28a||28b


  1. pierwszy index o||28c||28b||28a


Teraz posyłając z forma np. 14 potrzebuje zapisać liczbe ktorej jeszcze nie ma czyli sle 14 i teraz sprawdzam gdzie jest 14a badz 14b badz 14c i jesli gdzies jest tylko 14a drugiego indeksu nie ma to zapisuje mi 14b w kolejnym indeksie a jesi są 14a i 14b i trzeci indeks jest pusty i sle rowniez 14tke to zapisuje mi 14c. Tak samo z liczba 28.

Przykladowo sle 14tke a w pliku jest tak:

  1. pierwszy index o||14a


I teraz nie ma 14b wiec zapisuje mi w pliku w kolejnym indeksie 14b

  1. pierwszy index o||14a||14b


lub sląc 28 i w pliku jest tak:

  1. pierwszy index o||14a||28c


Zapisuje mi 28a jako trzeci index

  1. pierwszy index o||14a||28c||28a


Za nic w swiecie nie potrafie tego ugrysc.

Ten post edytował TwojPan 28.09.2013, 11:56:54
Go to the top of the page
+Quote Post
em1X
post
Post #2





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Przepraszam, ale nie rozumiem (IMG:style_emoticons/default/smile.gif) Nie tłumacz dla siebie, tłumacz dla innych.

Ten post edytował em1X 28.09.2013, 11:57:15
Go to the top of the page
+Quote Post
TwojPan
post
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 13.08.2013

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


Cytat(em1X @ 28.09.2013, 11:56:52 ) *
Przepraszam, ale nie rozumiem (IMG:style_emoticons/default/smile.gif) Nie tłumacz dla siebie, tłumacz dla innych.

Wiem ale ciezko mi to wytlumaczyc wlasnie.

To moze jeszcze raz.

Mam formularz z dwoma liczbami: 14 i 28.
Plik zawierac moze rozne liczby. Poniewaz liczba jest tak samo nazwa pliku musialem dodac przyrostki bo znajduja sie w tym samym katalogu i dlatego zamiast 14 jest 14a, 14b, 14c, 28a,28b,28c

Najgorsze to wytlumaczyc to wszystko (IMG:style_emoticons/default/smile.gif)

Posyłając 14tkę musze sprawdzić ktore z nich istnieje i przypisac kolejny wolny. Wiec jesli jest tak w pliku:

  1. costam 0||14c||14a


Brakuje 14b jako trzeci index i trzeba go dodac zeby wyszlo tak:

  1. costam 0||14c||14a||14b


Tyle ze moze byc tylko jeden index np:

  1. costam 0||14c


I brakuje tutaj 14a jak i 14b i teraz nie wazne ktory bedzie pierwszy. Moze byc a lub b

  1. costam 0||14c||14a


a przy kolejnym ewentualnym poslaniu formularza dopisze mi

  1. costam 0||14c||14a||14b


Prócz liczby 14 jest jeszcze druga w formularzu - 28 i moze ona se znajdowac rowniez w pliku.
Zasada sprawdzania i sapisu identyczna. Np jesli bedzie tak:

  1. costam 0||14c||14a


I posle liczbe 28

To zapisze mi pierwsza obojetnie jaka a, b lub c

  1. costam 0||14c||14a||28a


lub

  1. costam 0||14c||14a||28b


lub

  1. costam 0||14c||14a||28c


Mam nadzieje ze teraz juz zrozumiale (IMG:style_emoticons/default/smile.gif)

Ten post edytował TwojPan 28.09.2013, 12:14:56
Go to the top of the page
+Quote Post
em1X
post
Post #4





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


1) Można zobaczyć formularz?
2) Można zobaczyć katalog z plikami?
3) Można zobaczyć zawartość plików?
4) Do czego Ci to potrzebne?
Go to the top of the page
+Quote Post
TwojPan
post
Post #5





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 13.08.2013

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


Cytat(em1X @ 28.09.2013, 12:14:03 ) *
1) Można zobaczyć formularz?
2) Można zobaczyć katalog z plikami?
3) Można zobaczyć zawartość plików?
4) Do czego Ci to potrzebne?


Poptrzebuje poprostu.

Mylalem nad czyms takim jak:

  1. if(($ex[1]=="14a"))
  2. {
  3. $_POST['newbus'] = '14b';
  4. }
  5. if(($ex[1]=="14b"))
  6. {
  7. $_POST['newbus'] = '14c';
  8. }
  9.  
  10.  
  11.  
  12.  
  13.  
  14. if(($ex[1]=="28a"))
  15. {
  16. $_POST['newbus'] = '28b';
  17. }
  18. if(($ex[1]=="28b"))
  19. {
  20. $_POST['newbus'] = '28c';
  21. }
  22.  
  23. print $_POST['newbus']; // to pole z forma
Ale to nie dziala (IMG:style_emoticons/default/sad.gif) W taki sposob trzebaby sprawdzac jeszcze index [2] i [3] ale to zupelnie jest bez sensu ale chyba teraz wiesz o co chodzi.

Danych nie podam bo to jest tylko część sporego skryptu a plik ma 2500 linii

Ten post edytował TwojPan 28.09.2013, 12:26:46
Go to the top of the page
+Quote Post
em1X
post
Post #6





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Nie udzieliłeś mi odpowiedzi na pytania, pokazujesz mi rzeczy wyrwane z kontekstu. Nie jestem w stanie Ci pomóc.
Go to the top of the page
+Quote Post
TwojPan
post
Post #7





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 13.08.2013

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


Cytat(em1X @ 28.09.2013, 12:29:17 ) *
Nie udzieliłeś mi odpowiedzi na pytania, pokazujesz mi rzeczy wyrwane z kontekstu. Nie jestem w stanie Ci pomóc.
Jak chcesz mi pomoc widzac formularz. Formularz to formularz.

  1. <select name=\"newbus\">";
  2. print "<option VALUE=\"14\">14</OPTION>";
  3. print "<option VALUE=\"28\">28</OPTION></select>";


Jak mam Ci katalog pokazac ? (IMG:style_emoticons/default/smile.gif) poprostu jest tam plik ktory zawiera linie ktore pokazuje j.w i do niego ma sie zapisywac. Chodzi mi tylko o zaps do tego pliku nic wiecej. Inne pliki nie sa z tym zwiazane w tej czesci.

Plik ktory wywoluje zawiera 2500 linii i jest powiazany z innymi plikami konfiguracyjnymi wiec nie widze sensu pokazywania tego.

Ten post edytował TwojPan 28.09.2013, 12:42:07
Go to the top of the page
+Quote Post
em1X
post
Post #8





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


1) Ok jest już trochę jaśniej. A możesz wytłumaczyć dlaczego pierwszą wartością w pliku jest zawsze jakieś, cytuję: "cośtam 0" albo "pierwszy index 0". Ta wartość ma być pomijana? Jest tam jakaś wartość opisowa? Do czego ona służy? Lepiej jakbyś zawsze prawdziwe dane wyświetlał jakie występują zamiast wymyślać przykłady.

2) Czy plik z wartościami zajmuje tylko jedną linijkę? Dlatego prosiłem o prawdziwą zawartość pliku.

Ten post edytował em1X 28.09.2013, 12:59:59
Go to the top of the page
+Quote Post
TwojPan
post
Post #9





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 13.08.2013

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


Cytat(em1X @ 28.09.2013, 12:58:08 ) *
Ok jest już trochę jaśniej. A możesz wytłumaczyć dlaczego pierwszą wartością w pliku jest zawsze jakieś, cytuję: "cośtam 0" albo "pierwszy index 0". Ta wartość ma być pomijana? Jest tam jakaś wartość opisowa? Do czego ona służy?

Pierwszy index jest zupelnie niewazny. Jesli dojdzie do ponownego zapisu pozostaje taki sam. Najwazniejsze sa te nastepne indeksy.

Cytat(em1X @ 28.09.2013, 12:58:08 ) *
2) Czy plik z wartościami zajmuje tylko jedną linijkę? Dlatego prosiłem o prawdziwą zawartość pliku.
Plik moze zawierac jedna lub kilkadziesiat ale wywolywany jest wiersz za kazdym razem jakis konkretny. Jak napisalem. Zawartosc pliku jest zmenna.

Moze byc tak np. jak ponizej ale nie nastepuje szukanie w calym pliku lecz pobrana zostaje linia.

xccccccccccc||14a||28b
xxxxxxxxxxxxx||14a||14b||28a
zzzzzzzzzzzzzz||14a||28b
aaaaaaaaaaaaaaa||14a||14b||28a
xxxxxxxxxxxxxx||14c||28b
nnnnnnnnnnnnnn||14c||14a||28a

Ten post edytował TwojPan 28.09.2013, 13:07:55
Go to the top of the page
+Quote Post
em1X
post
Post #10





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Cytat(TwojPan @ 28.09.2013, 14:02:56 ) *
Jesli dojdzie do ponownego zapisu pozostaje taki sam. Najwazniejsze sa te nastepne indeksy.


To też jest ważna informacja, którą pominąłeś. Jak to zwykle bywa w przypadku początkujących programistów, próbują rozwiązać prosty problem wykorzystując jakieś niesamowite pomysły, które kaskadowo powodują ogrom problemów kolejnych. To się nazywa "technical debt" i Ty właśnie taki zaciągnąłeś podejrzewam (IMG:style_emoticons/default/smile.gif)

Czy wartość dopisywana ma być zawsze na końcu?
Go to the top of the page
+Quote Post
TwojPan
post
Post #11





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 13.08.2013

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


Cytat(em1X @ 28.09.2013, 13:12:00 ) *
Czy wartość dopisywana ma być zawsze na końcu?
Te numery tak. Po kolei. Nie wiecej jak trzy. Czyli:


xccccccccccc||14a
xxxxxxxxxxxxx||14a||14b
zzzzzzzzzzzzzz||14a||28b||14c


Nie wiecej niz 3. Njagorsze to jest to sprawdzanie co gdzie i zapis.
Go to the top of the page
+Quote Post
em1X
post
Post #12





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Podaj jak ma wyglądać ciąg wynikowy, po przesłaniu liczby "14", dla każdego z poniższych, możliwych wartości z pliku:

1) xxxxxxxxxxxxxxxxx||14c||28b
2) xxxxxxxxxx||14c||14b||14a
3) xxxxxxxx||28a||28c||28b
Go to the top of the page
+Quote Post
TwojPan
post
Post #13





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 13.08.2013

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


Cytat(em1X @ 28.09.2013, 13:25:51 ) *
Podaj jak ma wyglądać ciąg wynikowy, po przesłaniu liczby "14", dla każdego z poniższych, możliwych wartości z pliku:

1) xxxxxxxxxxxxxxxxx||14c||28b
2) xxxxxxxxxx||14c||14b||14a
3) xxxxxxxx||28a||28c||28b


To tylko ma byc jesli sa dwie wartosci a trzecią mozna dopisac.

Po wyslaniu 14tki w pierwszym przypadku sa dwie mozliwosci: 14a i 14b i ma wygladac tak:

xxxxxxxxxxxxxxxxx||14c||28b||14b

bądz

xxxxxxxxxxxxxxxxx||14c||28b||14a

Tak naprawde nie ma to znaczenia bo to czy sa trzy indeksy sprawdzam wczesniej.

W drugim nie przejdzie bo sa juz trzy. Trzeci rowniez.

Co innego jakby bylo:

xxxxxxxx||28a||28c

Wtedy sa trry mozliwosci 14a, 14b, 14c i rowniez nie ma znaczenia ktore sie zapisze.

Bądz:

xxxxxxxx||28a

i posylamy 14 wtedy jest są do zapisu dwie 14tki: 14a, 14b, 14c tez niewazne ktore i moze wynik wygladac tak:

xxxxxxxx||28a||14c||14a

Ten post edytował TwojPan 28.09.2013, 13:37:21
Go to the top of the page
+Quote Post
em1X
post
Post #14





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


  1. function nowyCiag($ciag, $newbus, $ograniczenieWartosci=3)
  2. {
  3. $tablica=explode('||', trim($ciag));
  4.  
  5. // jeżeli ma już 3 wartości to nie rób nic
  6. if ($ograniczenieWartosci == (count($tablica)-1)) {
  7. return $ciag;
  8. }
  9.  
  10. /**
  11.   * Najpierw musimy wyznaczyć wszystkie liczby,
  12.   * które są te same, jak ta wysłana.
  13.   * Przy okazji pobieramy literki.
  14.   */
  15. $liczby=array();
  16. $literki=array();
  17.  
  18. for ($i=1, $count=count($tablica); $i<$count; $i++) {
  19. $liczba=preg_replace('/[^0-9]/', '', $tablica[$i]);
  20. if ($liczba == $newbus) {
  21. $liczby[] = $tablica[$i];
  22.  
  23. $literka=str_replace($liczba, '', $tablica[$i]);
  24. $literki[$literka]=true;
  25. }
  26. }
  27.  
  28. /**
  29.   * Jedziemy po kolei alfabetem i szukamy pierwszej wolnej
  30.   * litery, którą możemy wstawić.
  31.   */
  32. for ($i='a'; $i<='z'; $i++) {
  33. // jeżeli znaleziono 1 wolną literkę
  34. // dopisz ją i zwróć ciąg
  35. if (! isset($literki[$i])) {
  36. return sprintf('%s||%u%s', $ciag, $newbus, $i);
  37. }
  38. }
  39.  
  40. throw new Exception(sprintf('Zabrakło literek dla ciągu %s', $ciag));
  41. }


To chyba by się zgadzało:
  1. // zawartosc z pliku
  2. $ciag_oryginalny='costam 0||14c||14a';
  3. $newbus=intval($_POST['newbus']);
  4.  
  5. echo nowyCiag($ciag_oryginalny, $newbus);
  6.  
  7. // dla liczby 28 otrzymamy:
  8. // costam 0||14c||14a||28a
  9.  
  10. // dla liczby 14 otrzymamy:
  11. // costam 0||14c||14a||14b


Program może działać uniwersalnie dla każdej liczby, z większą liczbą wartości.

Ten post edytował em1X 28.09.2013, 17:43:35
Go to the top of the page
+Quote Post
TwojPan
post
Post #15





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 13.08.2013

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


Cytat(em1X @ 28.09.2013, 13:36:58 ) *
Czyli jeżeli mamy w pliku już 3 wartości, to skrypt ma zwrócić to co dostał? (ma nic nie robić)?
Ja juz to mam. Wczesniej sprawdzam czy sa 3 indexy i jesli tak to jest info i stop.


Ogolnie to jest skrypt ktory ustawia pliki na serwerze potrzebne do bukowania biletow. Te 14stki i 28mki to sa busy o tylu miejscach. Wlascicel chce miec mozliwosc dodawania busow i usuwania. Kazda linia w pliku do dana trasa (index 0 to o co sie pytales to nazwa trasy) Problem w tym ze moze On chcieć ustawic trzy busy po 14 miejsc badz trzy po 28 lub pomieszac. Wczesniej mialem to w jednym pliku ale On chce aby kazdy bus na dana trase mial osobny plik no i zeby to jakos wskazywac musze ustawic plik gdzie wskaze ile jest danego dnia (nazwa pliku jest to numer dnia miesiaca) tras (linie w pliku) i ilosc busow (indexy) tylko ze jesli chce ustawic dwa lub trzy takie same busy musze cos dodac do tego no i padlo na te przyrostki a,b,c
Go to the top of the page
+Quote Post
em1X
post
Post #16





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Przegapiłeś rozwiązanie. Patrz wyżej.
Go to the top of the page
+Quote Post
TwojPan
post
Post #17





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 13.08.2013

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


Serdeczne Bóg zapłać dobry człowieku (IMG:style_emoticons/default/smile.gif)

Dziekuje bardzo (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
em1X
post
Post #18





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Czasem samo opisanie problemu jest trudniejsze niż jego rozwiązanie.
Paulo Coelho.

Nie zapomnij wcisnąć "pomógł".

Ten post edytował em1X 28.09.2013, 14:06:40
Go to the top of the page
+Quote Post
Pyton_000
post
Post #19





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Jedna uwaga.
Kod
$count=count($tablica);

używane w pętli to zabójstwo. Należy tego unikać jak ognia !
Go to the top of the page
+Quote Post
em1X
post
Post #20





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Pyton, ośmieszasz się.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #21





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


A wybacz, za szybko przeczytałem (IMG:style_emoticons/default/smile.gif) Mój błąd. Błagam o wybaczenie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
em1X
post
Post #22





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Już nawet pomijając Twój błąd, nie mówimy tu o aplikacjach obciążonych tysiącami requestów na sekundę. Funkcja count() zwyczajnie zwraca wskaźnik ilości elementów ze struktury HashTable w C. Czy tablica będzie miała milion elementów, czy jeden, jest zawsze tak samo szybka. Mówimy tu o promilu różnicy przy iluśtam tysiącach iteracji. Skoro to jest dla Ciebie "zabójstwo" to raczej słabo jeszcze PHP znasz, no offense (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #23





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Może nie związane z moją pomyłką ale http://www.phpbench.com/ pokazuje "realia"
Go to the top of the page
+Quote Post
em1X
post
Post #24





Grupa: Zarejestrowani
Postów: 984
Pomógł: 41
Dołączył: 16.03.2002
Skąd: Płock

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


Już patrząc na sam kod przykładów widzę, że się na PHP nie znają zupełnie. Wyniki też są tendencyjne. Jaką różnicę robi dla 90% korzystających z PHP, polegające na zaoszczędzeniu 0,001 sekundy, te Twoje mordercze, cytuję "+ 50987 %"? Zobaczyłeś dużo cyferek kolorem czerwonym i zwyczajnie dałeś się zmanipulować, i rozpowiadasz na forach jak straszne jest używanie count w pętli. Czy powinno się tak pisać? Dobrą praktyką jest nie pisanie tak kodu.. ale czy to sprawi większości jakąkolwiek różnicę? Nie. Fajniej by było, gdyby użytkownicy uczyli się porządnych praktyk w pisaniu kodu obiektowego, uczyli się wzorców, a nie zawracali głowę oszczędzaniem ułamków sekund nad jedną linijką kodu, podczas gdy tracą dziesiątki tysięcy więcej brakiem wiedzy w całości architektury jako takiej, będącej wynikiem ich pracy.

Ten post edytował em1X 28.09.2013, 22:59:57
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 26.09.2025 - 01:11