Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne]Prośba o pomoc w wyborze odpowiedniej technologii
lukpio3
post 10.09.2014, 13:15:30
Post #1





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 1.05.2010

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


Witam.
Ja mam do Was takie dość nietypowe pytanko a w zasadzie prośbę o pomoc przy wyborze technologii do wykonania projektu. Sprawa dość prosta. Aplikacja, działająca na serwerze, wczytuję jej plik txt w której znajdują się takie dane jak: id, data od, data do, kwota. Te dane znajdują się w wierszach, każdy wiersz to osobne dane. System wczytuje te dane, następnie na podstawie dat oblicza różnicę w dniach czyli od daty do, odejmuje datę od, następnie ilość tych dni mnoży przez 2 i uzyskaną wartość dzieli przez kwotę i zwraca konkretną wartość, inną dla każdego wiersza. Następnie całość ponownie eksportuje do pliku txt. Tyle. Zastanawiam się nad technologią wykonania tego narzędzia. Gdyby nie fakt że musi to działać na serwerze to zrobił bym makro w Excelu, godzinka roboty i po sprawie ale że ma to być serwerowe to niestety odpada. Java też raczej nie bo nie chce mi się robić klienta i serwera tym bardziej że to ma być wykonane najprościej jak tylko się da. Ma wczytać plik, wykonać wskazane operacje i zapisać wszystko z wynikiem ponownie do pliku. Tyle w temacie. Mam nadzieję że pomożecie. Z góry dziękuję smile.gif
Go to the top of the page
+Quote Post
nospor
post 10.09.2014, 13:17:44
Post #2





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




Skoro pytasz na forum php, to będą oryginalny i napisze:
użyj php


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
lukpio3
post 10.09.2014, 13:53:09
Post #3





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 1.05.2010

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


Piszę tu dlatego że właśnie php rozważałem na pierwszym miejscu. Wydaje się być najprostszym rozwiązaniem. Mam jeszcze pytanko, czy możecie podrzucić w jaki sposób i w jakie pole wczytać dane z tego pliku tak aby później na tych danych mozna było wykonywać operacje? Stworzyć jakąś tabelę gdzie każda komórka będzie osobną daną? Bo muszę kurcze się do tego później jakoś odwołać przy wykonywaniu obliczeń. A mój plik wygląda następująco:

id | data od | data do | kwota
id | data od | data do | kwota
id | data od | data do | kwota
.
.
.
id | data od | data do | kwota

W taki sposób jest sformatowany. Kolumny mam zawsze 4, wierszy może być 'n'. Nie mam podanej konkretnej wartości. Może być jeden a może być ich i 100.
Go to the top of the page
+Quote Post
Neproify
post 10.09.2014, 13:56:28
Post #4





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 6.09.2014

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


Cytat(lukpio3 @ 10.09.2014, 14:53:09 ) *
Piszę tu dlatego że właśnie php rozważałem na pierwszym miejscu. Wydaje się być najprostszym rozwiązaniem. Mam jeszcze pytanko, czy możecie podrzucić w jaki sposób i w jakie pole wczytać dane z tego pliku tak aby później na tych danych mozna było wykonywać operacje? Stworzyć jakąś tabelę gdzie każda komórka będzie osobną daną? Bo muszę kurcze się do tego później jakoś odwołać przy wykonywaniu obliczeń. A mój plik wygląda następująco:

id | data od | data do | kwota
id | data od | data do | kwota
id | data od | data do | kwota
.
.
.
id | data od | data do | kwota

W taki sposób jest sformatowany. Kolumny mam zawsze 4, wierszy może być 'n'. Nie mam podanej konkretnej wartości. Może być jeden a może być ich i 100.

Rozdzielasz to sscanfem, a potem zapisujesz w aktualnym wierszu poprzez sprintf.
Go to the top of the page
+Quote Post
nospor
post 10.09.2014, 13:56:35
Post #5





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




A po co ci do tego tabela w bazie? W poprzednim poscie pisales ze masz to wczytac z pliku i spowrotem do pliku zapisac. Po co cu tu tabela?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
lukpio3
post 10.09.2014, 14:07:53
Post #6





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 1.05.2010

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


Ok, zrobiłem wczytywanie danych z pliku z tym że plik który otwieram musi znajdować się w danym katalogu i w skrypcie podają jego tytuł. Z tym że tytuł może być różny. Dlatego potrzebuję zrobić odczyt z dowolnego pliku który użytkownik doda.

A po co tabela? Bo prócz odczytui zapisu muszę wykonać dodatkowe operacje i muszę w jakiś sposób odnieść się do tych danych. Dla przykładu, biorę wiersz 1:

id | data od | data do | kwota

i wykonuję opercję 'data do' - 'data od' = x, następnie x*2 = y, nastepnie 'kwota'/y = z. I po wykonaniu takich operacji na każdym wierszu wczytanych danych, powinienem uzyskać taki efekt:

id | data od | data do | kwota | z
id | data od | data do | kwota | z
id | data od | data do | kwota | z
.
.
.
id | data od | data do | kwota | z

I wynik tego muszę zapisać do pliku. Oczywiście obliczenia będą wykonywały się po wciśnięciu guzika "Oblicz".
Go to the top of the page
+Quote Post
nospor
post 10.09.2014, 14:10:38
Post #7





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




No dobrze, ale po co ci do tego tabela? Mając wszystkie wartosci po wczytaniu z pliku, naprawde mozesz to zrobic od razu. Nie wiem czy wiesz, ale php pozwala na dodawania, odejmowanie, mnozenie i dzielenie. Tabela w bazie do tych operacji naprawde nie jest potrzebna.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
lukpio3
post 10.09.2014, 14:13:44
Post #8





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 1.05.2010

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


Nie no spoko, ja nic nie mówię. PHP aż tak super nie znam dlatego właśnie chciałbym zasięgnąć Waszej porady. A powiedz w jaki sposób odwwołać się do konkretnej wartości?
Go to the top of the page
+Quote Post
nospor
post 10.09.2014, 14:15:04
Post #9





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




Cytat
PHP aż tak super nie znam
No ale bez przesady... kazdy jezyk programowania udostępnia takie podstawy jak dzialania matematyczne...

Pokaz jak wczytujesz te dane w php. Potem pojdziemy dalej.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
lukpio3
post 10.09.2014, 15:30:21
Post #10





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 1.05.2010

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


Dziękuję za zainteresowanie. Wiesz co, na razie to co zrobiłem to jakiś banał który akurat wiedziałem jak zrobić i stworzyłem to w przeciągu 2 minut. Kod który wkleję poniżej wyświetla mi w text area zawartość pliku plik.txt. No to oczywiście działa, zresztą trudno żeby nie działało smile.gif. Teraz próbuję zrobić aby wyświetlało mi zawartość pliku którą załaduję sam. Mam action forma do ładowania pliku, wciskam przeglądaj, wybieram plik, oczywiście docelowo będzie tam walidacja żeby tylko txt przeyjmował. I obok mam guzik 'Wczytaj plik' i chcę żeby właśnie taką metodą ten plik był wczytywany. Ale z tym jeszcze walczę i szukam rozwiązania tego problemu.

  1. <link rel="stylesheet" type="text/css" href="template.css" />
  2. <title>Tytuł</title>
  3. </head>
  4. <img src = "indeks.jpg"/>
  5.  
  6. <center>Tytuł</center><Br>
  7. <form action="..." enctype="multipart/form-data">
  8. <input type="file" name="Załaduj plik *.txt" />
  9. <input onclick="this.form.txt.select();" type="button" style id="przycisk" value="Wczytaj plik">
  10. </form>
  11.  
  12. <form>
  13.  
  14.  
  15. <textarea name="txt" disabled="disabled" rows="12" cols="100" style id="lista">
  16. <?php include('plik.txt');?>
  17.  
  18. <input onclick="this.form.txt.select();" type="button" style id="przycisk" value="Oblicz">
  19. </form>
  20. </table>
  21.  
  22. </body>
  23.  
  24.  
  25.  
  26. </html>
Go to the top of the page
+Quote Post
tzm
post 10.09.2014, 15:42:27
Post #11





Grupa: Zarejestrowani
Postów: 675
Pomógł: 58
Dołączył: 17.12.2013

Ostrzeżenie: (10%)
X----


O kurde... Ty w ogole nie znasz php i nie widzisz nawet roznicy miedzy wczytaniem czegos do textarea a wczytaniem z pliku do php na czym potem mozna tworzyc tablice i na niej operowac w sposob jaki opisales na poczatku watku. Nie wiem nawet co Ci powiedziec... albo daj sobie spokoj, albo naucz sie php. Stary nie ogarniesz tego chocbys nie wiem jak bardzo chcial bez nauki podstaw jezyka.
Go to the top of the page
+Quote Post
lukpio3
post 10.09.2014, 15:54:15
Post #12





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 1.05.2010

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


Ja to muszę wczytać do text area żeby użytkownik widział zawartość pliku a następnie dopiero na tym wykonać to obliczenie. Wszystko ma być widoczne.

Proszę, tak na szybko klepnąłem skrypt który wyświetla mi zawartość pliku w text area + dopdatkowo wcześniej tworzy tablicę dwuwymiarową z zawartością pliku i wczytuje do niej dane zawarte z pliku przyjmując jako separator danych pojedynczą spację.

  1. <!DOCTYPE html>
  2. <meta charset="UTF-8">
  3. <link rel="stylesheet" type="text/css" href="template.css" />
  4.  
  5. <title>Tytuł</title>
  6. </head>
  7. <br>
  8. <img src = "indeks.jpg"/>
  9.  
  10. <center>Tytuł</center><Br>
  11.  
  12. <form action="..." enctype="multipart/form-data">
  13. <input type="file" name="Załaduj plik *.txt" />
  14. <input onclick="this.form.txt.select();" type="button" style id="przycisk" value="Wczytaj plik">
  15. </form>
  16.  
  17. <form>
  18.  
  19. <?php
  20. $filename = "plik.txt";
  21. $handle = fopen($filename, "r");
  22. $data = array();
  23. if ($handle) {
  24. while (!feof($handle)) {
  25. $buffer = fgets($handle, 4096);
  26. $data[]=explode(" ", $buffer);
  27. }
  28. fclose($handle);
  29. } else {
  30. die("Błąd otwarcia pliku $filename");
  31. }
  32.  
  33. ?>
  34. <textarea name="txt" disabled="disabled" rows="12" cols="100" style id="lista">
  35. <?php include('plik.txt');?>
  36. <input onclick="this.form.txt.select();" type="button" style id="przycisk" value="Oblicz">
  37. </form>
  38. </table>
  39.  
  40. </body>
  41.  
  42.  
  43.  
  44. </html>
Go to the top of the page
+Quote Post
nospor
post 11.09.2014, 06:39:29
Post #13





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6296
Dołączył: 27.12.2004




Przy zalozeniu, ze poprawnie utworzyles tablice $data, to teraz po niej przelec i rob co masz robic.

  1. print_r($data); //sprawdzenie co zawiera dokladnie tablica.
  2.  
  3. foreach ($data as $key => $row) {
  4. //liczenie liczby dni
  5. $x = strtotime($row[2].' GMT')-strtotime($row[1].' GMT')/86400;
  6. $y = $x*2;
  7. $z = $row[3] / $y;
  8. $row['z'] = $z;
  9. $data[$key] = $row;
  10. }
  11.  
  12. print_r($data); //sprawdzenie co zawiera dokladnie tablica po wyliczeniach


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
lukpio3
post 13.09.2014, 21:37:15
Post #14





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 1.05.2010

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


Ze względów wydajnościowych i nie tylko muszę zrezygnować z podejścia z tablicą. Dlaczego? Po pierwsze plik wsadowy jaki dostanę może mieć nawet 15k wierszy więc obróbka takiego pliku w tablicy powoduje crash przeglądarki ponieważ kończy się RAM. Ok, serwer będzie miał go więcej (testy robię lokalnie na xampp-ie) ale nie chodzi o to żeby zapchać cały RAM serwera na którym chodzą mi bazy danych. Wykluczone. Druga sprawa to plik jaki otrzymuję do wasdu nie ma konkretnego separatora. Co to oznacza? A to że mam np dwie spacje, potok, właściwa dana, potok, 10 spacji, potok - dana - potok, 6 spacji ... itd. Zrobienie na takim pliku explode jest nie możliwe. Ale przeanalizowałem kilka takich plików i zauważyłem pewną prawidłowość. A mianowicie są one stałopozycyjne. Co mi świetnie uproszcza sprawę ponieważ dana która mnie interesuje, w każdym wierwszy zaczyna się i kończy na określonej pozycji a co za tym idzie, mogę zastosować metodę substr i wycinać konkretne pozycje na których będę przpeorwadzał operację i zwrócę już konkretny wynik. Także zaczynam przygodę z nowym podejściem do problemu. Ale cieszę się że tak wyszło, że napotkałem taki problem ponieważ bardzo wiele on mnie nauczył i zmusił do szukania nowych rozwiązań w celu zoptymalizowania narzędzia. I to jesto właśnie to co lubię w programowaniu że ja zrobię coś co chodzi a przyjdzie ktoś inny i zmodyfikuje to tak że będzie działało wydajniej. Super sprawa. W razie problemów mam nadzieję że mogę liczyć na Waszą pomoc smile.gif.
Pozdrawiam

Ten post edytował lukpio3 14.09.2014, 10:33:11
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 23:45