[delphi] powazny problem teoretyczny dla TWARDZIELI ::D

0

Witajcie, potzrebuje napisac pewien programo nastepujacych zalozeniach:
Wpierw teoria:
Pewna osoba tworzy codziennie plik graficzny (.jpg) o dynamicznej nazwie(co dzien inna nazwa):
wg schematu File_+Data(rok.miesiac.dzien)+a(literka a,b lubc)+.jpg .....
Pogrubione kawałki sa STAŁE reszta zmienna..podaje przyklad : File_070806a.jpg gdzie 07 to rok 08 to miesiac 06 to dzien ..

Treaz ten plik jest umieszczany na serwerze i ludzie moga go sciagac z adresu np : www.strona.pl/File_070806a.jpg

Chce napisac program ktory sciagnie mi ten plik na kompa...o ile gdyby nazwa byla stala to noł problem ale jest zmienna wiec czy da rade jakos porownywac te nazwy i ilaczyc sie poszczegolnie na serwer i jesli sie poalczy to sciaga jesli nie to pzrechodzi do kolejnej nazwy..

w programie moge zastosowac np ze data to tylko 07(rok) 07 (miesiac) to jakby stały element ktory codzien sie neizmienia natomaist dzien tygodnia juz tak wiec np sprawdzac pokolei kazdy dzien miesiaca ....

Podsumowanie
Jesli sa tu jacys znawcy a sa pewnie :D czekam na koncepcje porady wskazowki przyklady
jak cos to bede pisal
pozdrawiam

0

Jeśli nazwa ma stałą ilość liter - to nic trudnego.

  1. Po prostu ściągasz kod strony
  2. pobierasz nazwę z kodu strony - znając pozycję nazwy w tym kodzie, kopiujesz nazwę do zmiennej
  3. pobierasz ten obrazek czy co tam chcesz z nim zrobić
    Dodam ze możesz sprawdzać sobie co jakiś czas czy nazwa się zmieniła, porównując wczesniej pobraną z pobraną aktualnie z kodu strony

PS. nie jestem twardzielem bo i pytanie nie było dla twardzieli :)
tak własnie kiedyś pobierano obrazek z kodem Idei bodajże, by można było wysłać sms`a

0

hmm no jestem troche zielony przyznam sie no, ale kodu strony ja tam nie widzepo BACKSLASHU/...
obrazek nie jest zamieszczony na stronie obok tekstu itp ale jako plik na serwerze....mozliwe ze zamiast www.strona.pl/File070826a.jpg moze byc ftp.strona.pl/File070826a.jpg (bez hasla) wtedy zadnych stron (zawartosci) nie bedzie.... ale dzieki za odzew

0

Hmm, zakładając że do pliku wpisywana jest aktualna data, to wystarczy pobrać z systemu aktualną datę (w wypadku, kiedy chcielibyśmy obrazek sprzed n dni, trzeba by od tej daty odjąc n i tu potrzebna by była funkcja uwzględniająca ilość dni w miesiącu itp zawiłości) a potem wystarczą trzy próby z literkami na końcu (a, b, c) Jeżeli jednak jest to jakaś tam data, to nie mam pomysłu :P

BTW ja też twardzielem nie jestem, powiedziałbym nawet że jestem dość zielony ;)

0

no rzeczywiscie data moja systemowa nie musi byc rowna dacie tej na serwerze w plikunp: ja mam
2007-08-09 a plik nazywa sie File_070804b.jpg..wtedy by nalezalo pobrac date systemowa i odjac zalozmy umowne 5 dni i potem sprawdzac (1.ale jaki format daty uzyc zeby uzyskac format taki typu 070805 oraz
2.Jak sprawnie odejmowac takie daty od siebie z losowaniem a,b lub c chyba dam rade) pozdro

0
function Convert(Data: TDate): string;
var
 Tmp: string;
begin
  Tmp := DateToStr(Data);
  result := copy(Tmp,3,2) + copy(Tmp,6,2) + copy(Tmp,9,2);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := Convert(Now-1);
end;

Funkcja Covert zwraca datę w tym formacie co chciałeś .. Now do data dzisiejsza ... jak od niej odejmujesz to uzyskujesz dni wcześniejsze, czyli:
Now-1 to dzień wczorajszy. Ilość dni w miesiacu itd. jest już brana pod uwagę ;)

0
  1. Arthan dobra robota kod idealny...
    2.Z losowaniem a,b lub c - a wlasciwie bez losowania czy po prostu wypisac 3 mozliwosci rozne (3 literki sa).
    moze jakos w petelce to by ladnie wyszlo
    3.Na koniec pozostaje mi napisac kod ktory sprawdzi pobieranie pliku dla 5 dni np
    070801
    070802
    070803
    070804
    070805
    czy instrukcja if then else sie w tym wypadku sprawdzi??
0
  1. Proszę bardzo ;)
  2. skoro na serwerze mogą być wszystkie 3 to ja bym je wszystkie sprawdzał a ponieważ to są tylko 3 w tym miejscu bez pętelki sie obejdzie, natomiast...
  3. jak chcesz dla kilku dni to moim zdaniem tu warto zrobić pętle ;)

czy if then else się sprawdzi to zależy jaki będziesz miał kod służący do ściągania plików

0

w uproszczeniu....

if URLDownloadToFile(Nil,'http://www.strona.pl/File_07080<b>1</b>a.jpg','obrazek.jpg',0,Nil) = 0 then
 URLDownloadToFile(Nil,'http://www.strona.pl/File_07080<b>2</b>a.jpg','obrazek.jpg',0,Nil) else
URLDownloadToFile(Nil,'http://www.strona.pl/File_07080<b>3</b>a.jpg','obrazek.jpg',0,Nil) ;

no cos takeigo jesli znacie jakis lepszy sposob pobrania pliku piszcie.....

0

Twój kod działa tak ...
Jeśli plik File_070801a.jpg udało się ściągnąć
to ściągaj plik File_070802a.jpg
jeżeli nie to ściągaj plik File_070803a.jpg

nie wiem czy o to Ci chodziło :P
poza tym.. często jak tak ściągasz to gdy nie ma takiego obrazka na serwerze to ściąga stronę internetową o błędzie i ją zapisuje jako ten plik obrazka i zwraca że udało się ściągnąć .. więc chyba ten sposób odpada .. chyba że on jakimś cudem u Ciebie działa?

Mi się wydaje że by trza było ściągać każdy plik po kolei w pętli .. otwierać plik i sprawdzać czy pierwsze trzy znaki w pliku to 'GIF' jeśli tak to zakładamy że jest to dobrze ściągnięty obrazek i wychodzimy z pętli.

0

wiem cos namieszalem ale tego Twojgo sposobu to nie rozumiem ....aha dodam ze nie sciaga mi stron tylko podany plik,,,nie wiem jak u CIebie :D

if URLDownloadToFile(Nil,'http://www.strona.pl/File_07080<b>1</b>a.jpg','obrazek.jpg',0,Nil) <> 0 then
 if URLDownloadToFile(Nil,'http://www.strona.pl/File_07080<b>2</b>a.jpg','obrazek.jpg',0,Nil) <>0 then
URLDownloadToFile(Nil,'http://www.strona.pl/File_07080<b>3</b>a.jpg','obrazek.jpg',0,Nil) ;

...

0

To skoro u Ciebie jest ok .. to może coś takiego:

procedure TForm1.Button1Click(Sender: TObject);
var Dzien, Literka: integer;
begin
  for Dzien := 1 to 5 do
   for Literka := 97 to 99 do // 97 w kodzie ASCI to 'a', 98 to 'b', itd.
     begin
      if URLDownloadToFile(Nil,Pchar('http://www.strona.pl/File_0708'+IntToStr(Dzien)+Chr(Literka)+'.jpg'),'obrazek.jpg',0,Nil) = 0 then
        Exit;
      //ListBox1.Items.Add(Pchar('http://www.strona.pl/File_0708'+IntToStr(Dzien)+Chr(Literka)+'.jpg'));
     end;
end;

Jak wstawisz ListBoxa i odkomentujesz zakomentowaną linijkę to Ci się wyświetlą te linki .. żeby bardziej unaocznić działanie programu ;)

0

arthan [browar] dziekuje - dzis juz tego nie sprawdze ale kod wydaje mi sie byc spoks jak jutro to polacze i zrobie test na pewnym serwerze,,,, pozdro

1 użytkowników online, w tym zalogowanych: 0, gości: 1