lukpio3
10.09.2014, 13:15:30
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ę
nospor
10.09.2014, 13:17:44
Skoro pytasz na forum php, to będą oryginalny i napisze:
użyj php
lukpio3
10.09.2014, 13: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.
Neproify
10.09.2014, 13:56:28
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.
nospor
10.09.2014, 13:56:35
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?
lukpio3
10.09.2014, 14:07:53
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".
nospor
10.09.2014, 14:10:38
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.
lukpio3
10.09.2014, 14:13:44
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?
nospor
10.09.2014, 14:15:04
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.
lukpio3
10.09.2014, 15:30:21
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

. 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.
<link rel="stylesheet" type="text/css" href="template.css" /> <img src = "indeks.jpg"/>
<form action="..." enctype="multipart/form-data"> <input type="file" name="Załaduj plik *.txt" /> <input onclick="this.form.txt.select();" type="button" style id="przycisk" value="Wczytaj plik">
<textarea name="txt" disabled="disabled" rows="12" cols="100" style id="lista"> <?php include('plik.txt');?>
<input onclick="this.form.txt.select();" type="button" style id="przycisk" value="Oblicz">
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.
lukpio3
10.09.2014, 15:54:15
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ę.
<!DOCTYPE html>
<link rel="stylesheet" type="text/css" href="template.css" />
<img src = "indeks.jpg"/>
<form action="..." enctype="multipart/form-data"> <input type="file" name="Załaduj plik *.txt" /> <input onclick="this.form.txt.select();" type="button" style id="przycisk" value="Wczytaj plik">
<?php
$filename = "plik.txt";
$handle = fopen($filename, "r");
$data = array();
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$data[]=explode(" ", $buffer);
}
fclose($handle);
} else {
die("Błąd otwarcia pliku $filename");
}
?>
<textarea name="txt" disabled="disabled" rows="12" cols="100" style id="lista"> <?php include('plik.txt');?>
<input onclick="this.form.txt.select();" type="button" style id="przycisk" value="Oblicz">
nospor
11.09.2014, 06:39:29
Przy zalozeniu, ze poprawnie utworzyles tablice $data, to teraz po niej przelec i rob co masz robic.
print_r($data); //sprawdzenie co zawiera dokladnie tablica.
foreach ($data as $key => $row) {
//liczenie liczby dni
$y = $x*2;
$z = $row[3] / $y;
$row['z'] = $z;
$data[$key] = $row;
}
print_r($data); //sprawdzenie co zawiera dokladnie tablica po wyliczeniach
lukpio3
13.09.2014, 21:37:15
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

.
Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.