Ĺadny brzuch
Witam!
Piszę swoją małą przeglądareczkę na informatykę, i mam następujący problem:
Chcę pobrać z serwera plik textowy i zapisać go na dysku jako plik tymczasowy (wiem, nie jest to bezpieczne ani szybie, ale ja się dopiero uczę). Ten plik zawiera znaczniki podobne do tych z HTML'a, lecz posiada moje rozszerzenie, oraz moje znaczniki. (Tak, to będzie przeglądarka dla nowego rodzaju plików mojego autorstwa :)). Jak zrobić, żeby program pobierał kolejne znaczniki i atrybuty do zmiennych. Przykładowy kod tego języka:
<dokument| Â <info| Â Â <autor| Gy-GY |autor> Â Â <tytul| jakaś nazwa |tytul> Â |info> Â <cialo| Â //tak jak w html'u BODY :)// Â Â <text: kolor=czerwony, wielkosc=13|text koloru czerwonego o rozmiarze 12px |text> Â |cialo> |dokument> //jak pewnie zauważyliście składnia to prawie, że html, tylko, że po polsku. To się zmieni w wersji finalnej.// //komentarze zaczynają się tak jak w delphi, ale mają zakończenie obowiązkowe//
i potem edytował komponenty na formatce np. <przycisk: wysokosc=12, szerokosc=56| text na przycisku |przycisk>.
Wiem, wydaje się, że program nie ma większego sensu, ale to się zmieni, ponieważ za pomocą tego kodu będą wyświetlane komponenty z delphi np. <przycisk| |przycisk> (tego nie ma w kodzie) to po prostu button.
Planuję także, żeby można było pisać procedury do każdego komponentu w oddzielnym pliku np.
Button_Click.rozszerzenie
==================================================
Label1.Caption := 'jakiś tekst'; //zmiana textu Labela
mam nadzieję, że wiecie o co chodzi.
Z góry dzięki za odpowiedzi
PS. Nie piszcie, że pomysł do kitu, bo nie wiedzieliście moich notatek, które pisałęm przez bardzo długo.
Użytkownik Gy-Gy edytował ten post 04 grudzień 2005, 16:27
czyli praktycznie wymysliles jezyk ale nie umiesz go obslugiwac ...
ja bym zrobil klase parsujaca, lecisz w petli po znakach i dodajesz do jakiegos ciagu tymczasowego. jak np. natrafisz na znak | to sprawdzasz co masz w ciagu tymczasowym (powinna tam byc nazwa taga) i juz ;]
BTW to w koncu przegladarka internetowa czy co?
Tak, to przeglądarka obsługująca mój język. Pliki pobiera z normalnego serwera.
A jak napisać to cuś parsujące. Wiem, że nie wypada, ale można prosić o kod? :)
Jestem całkowity początek, ale mam fajny pomysł i w miarę prosty w wykonaniu. Wszystko wiem jak zrobić za wyjątekim tych dwóch rzeczy.
//Gy-Gy
jednak jest trzeci problem. W oczekiwaniu na odpowiedź, pisałem edytor do tego mojego języka i znów problem. Jak zrobić to tak jak w tym Twoim HateML'u, tzn. po kliknięciu na <body> (w moim przypadku <cialo|) zrobić tak, aby sie wyświetlił ObjectInspektor i zapisywał atrybuty do tegoż znacznika?
//Gy-Gy
dobra. z tym ciągiem zrozumiałem. Ale co z tymi procedurkami i ObjectInspektorem?
Użytkownik Gy-Gy edytował ten post 04 grudzień 2005, 16:52
object inspector jest oparty na moim parserze html (patrz FAQ). a wstawianie do tekstu to zwykla podmiana.
co do Twojego jezyka to pisze jakis taki prosty parser, ale jezyk nie ma wogole standartow wiec musze go zmienic
masz tu kod
type TPParam = record name, val:string; end; TPParams = class list: array of TPParam; function GetByName(name:string):string; function count:integer; end; TParser = class private fPos: integer; fText: string; procedure Parse; procedure ParseToken(s:string); function GetParams:TPParams; public constructor Create(AText:string); end;
...
function TPParams.Count: integer; begin result:=high(list); end; function TPParams.GetByName(name:string):string; var i:integer; begin result:=''; name:= lowercase(name); for i:=low(list) to high (list) do if lowercase(list[i].name) = name then begin result:=list[i].val; break; end; end; constructor TParser.Create(AText:string); begin fText:= AText; fPos:=1; Parse; end; function TParser.GetParams:TPParams; var str:string; function _trim(s:string):string; var i:integer; begin result:=''; for i:=1 to length(s) do if (s[i] in ['A'..'Z','a'..'z','1'..'9']) then result:=result+s[i]; end; begin result:= TPParams.Create; while (fPos <= length(fText)) do begin case fText[fPos] of ',','>': begin result.list[result.count].val:= str; str:=''; end; '=': begin SetLength(result.list,result.count+2); result.list[result.count].name := _trim(str); str:=''; end; else str:=str+fText[fPos]; end; inc(fPos); end; end; procedure TParser.ParseToken(s:string); var pr:TPParams; begin pr:=GetParams; if lowercase(s) = 'text' then begin showmessage('kolor: '+pr.GetByName('kolor')+#10'wielkosc: '+pr.GetByName('wielkosc')+#10'Zawartosc: '+pr.GetByName('value')); end; end; procedure Tparser.Parse; var l_token:string; begin while (fPos <= length(fText)) do begin case fText[fPos] of '<': l_token := ''; ':': ParseToken(l_token); else l_token:=l_token+fText[fPos]; end; inc (fPos); end; end;
Użytkownik migajek edytował ten post 04 grudzień 2005, 17:20
Pierwszy kod służy do...?
Drugi kod służy do...?
Ja się tam na robieniu stronek nie znam, więc mam pytanko. Jaka jest standartowa rozdzielczość w której powinna działać każda strona? Chodzi mi o to do jakiej najmniejszej rozdzielczości ma być przygotowana strona?
//Gy-Gy
Ups... Czy to drugie to nie jest przypadkiem przedłużenie pierwszego??
//Gy-Gy
W końcu nie napisałeś najważniejszego. Jak ściągnąć plik stronki do pliku tymczasowego i z niego odczytywać znaki. Proszę o szybką odpowiedź.
Użytkownik Gy-Gy edytował ten post 04 grudzień 2005, 17:43
Pierwszy kod służy do...?
Drugi kod służy do...?
Ja się tam na robieniu stronek nie znam, więc mam pytanko. Jaka jest standartowa rozdzielczość w której powinna działać każda strona? Chodzi mi o to do jakiej najmniejszej rozdzielczości ma być przygotowana strona?
//Gy-Gy
Ups... Czy to drugie to nie jest przypadkiem przedłużenie pierwszego??
dzięki. a jak z tym pobieraniem pliku i parsowanie go?
dzięki. a jak z tym pobieraniem pliku i parsowanie go?
no przeciez dalem ci klase tparser... obiekty juz se sam tworzy w funkcji ParseToken
no przeciez dalem ci klase tparser... obiekty juz se sam tworzy w funkcji ParseToken
Chodzi mi o pobranie tego pliku i jak go za pomocą tego czegoś sparsować?
Nie rozumiem tylko pobierania i zapisania kodu do stringa. Ręsztę umiem. Napisałem przykładowy kod, który jest zapisany w stringu, parsuję go, i wyświetla mi się, to co ma się wyświetlić. Jak już pisałem proszę tylko o pobieranie pliku i zapisanie kodu do stringa, albo bezpośrednie zapisane do stringa z serwera www. I nic więcej mi nie potrzeba.
//Gy-Gy
jesli nie rozumiesz tego kodu ktory dalem to nie pisz wlasnej przegladarki i wlasnego jezyka ...
Przecież najłatwiej uczyć się na przykładach. A to co piszę jest w miarę proste.
Użytkownik Gy-Gy edytował ten post 05 grudzień 2005, 16:22
Nie rozumiem tylko pobierania i zapisania kodu do stringa. Ręsztę umiem. Napisałem przykładowy kod, który jest zapisany w stringu, parsuję go, i wyświetla mi się, to co ma się wyświetlić. Jak już pisałem proszę tylko o pobieranie pliku i zapisanie kodu do stringa, albo bezpośrednie zapisane do stringa z serwera www. I nic więcej mi nie potrzeba.
Czyli mam dodać do uses TidHTTP? Jak tak zrobię to wywala błąd.
a jak piszę przy buttonie
var zmienna: String; begin get('http://jakisadres.pl/index.htm:zmienna); end;
i również wywala błąd. Co mam zrobić. Ja jeszcze nie wszedłem w zabawę z modułami, typami oraz klasami. Robię narazie programy po lamersku, a w prawdziwe programowanie wchodzę narazie badzo powoli.
Czyli mam dodać do uses TidHTTP? Jak tak zrobię to wywala błąd.
a jak piszę przy buttonie
var zmienna: String; begin get('http://jakisadres.pl/index.htm:zmienna); end;
i również wywala błąd. Co mam zrobić. Ja jeszcze nie wszedłem w zabawę z modułami, typami oraz klasami. Robię narazie programy po lamersku, a w prawdziwe programowanie wchodzę narazie badzo powoli.
Nie działa. Albo w DE2005PE nie ma tego czegoś, albo nie wiem. mam coś dopisać do uses??
Pojawia się:
[Error] Unit1.pas(30): E2003 Undeclared identifier: 'TidHTTP'
przy
ih:TidHTTP;
//sorka, zapędziłem się z tamtym stwierdzeniem :)
//Gy-Gy
Gdybyś napisał, że to trza dać z pakietu INDY Clients to bym nie zawracał tyłka. Ale wielkie dzięki. Tamten post pasował.
Ten temat już zamknięty. Pora na następny :)
====================================
Piszę post pod postem aby odświeżyć temat, więc mi tego nie wypominajcie.
Proszę o odpowiedź, czy da się wykonać procedurę która jest zapisana w zmiennej,
lub w dokumencie xml bądż ini.
PS. Poszukuję chętnych do tworzenia składni dla mojego języka.
Wynagrodzenie:
-Adresy stron z darmowymi dodatkami do komórek (aplikacje i gry java, tapety, dzwonki itp...)
-Panel administracyjny na stronie internetowej tej oto tworzonej przeglądareczki.
-jak wymyślę coś jeszcze do dopiszę.
Aha. Zgłoszenia proszę kierować na forum lub na grzegorzkrakowa@o2.pl, ponieważ nie za często spoglądam do prywatnych wiadomości.
Użytkownik Gy-Gy edytował ten post 08 grudzień 2005, 15:48
nie odswierza sie tematow w ten sposob...
odp: mozna. poczytaj o jezykach skryptowych ... <_<
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Piszę swoją małą przeglądareczkę na informatykę, i mam następujący problem:
Chcę pobrać z serwera plik textowy i zapisać go na dysku jako plik tymczasowy (wiem, nie jest to bezpieczne ani szybie, ale ja się dopiero uczę). Ten plik zawiera znaczniki podobne do tych z HTML'a, lecz posiada moje rozszerzenie, oraz moje znaczniki. (Tak, to będzie przeglądarka dla nowego rodzaju plików mojego autorstwa :)). Jak zrobić, żeby program pobierał kolejne znaczniki i atrybuty do zmiennych. Przykładowy kod tego języka:
<dokument| Â <info| Â Â <autor| Gy-GY |autor> Â Â <tytul| jakaś nazwa |tytul> Â |info> Â <cialo| Â //tak jak w html'u BODY :)// Â Â <text: kolor=czerwony, wielkosc=13|text koloru czerwonego o rozmiarze 12px |text> Â |cialo> |dokument> //jak pewnie zauważyliście składnia to prawie, że html, tylko, że po polsku. To się zmieni w wersji finalnej.// //komentarze zaczynają się tak jak w delphi, ale mają zakończenie obowiązkowe//
i potem edytował komponenty na formatce np. <przycisk: wysokosc=12, szerokosc=56| text na przycisku |przycisk>.
Wiem, wydaje się, że program nie ma większego sensu, ale to się zmieni, ponieważ za pomocą tego kodu będą wyświetlane komponenty z delphi np. <przycisk| |przycisk> (tego nie ma w kodzie) to po prostu button.
Planuję także, żeby można było pisać procedury do każdego komponentu w oddzielnym pliku np.
Button_Click.rozszerzenie
==================================================
Label1.Caption := 'jakiś tekst'; //zmiana textu Labela
mam nadzieję, że wiecie o co chodzi.
Z góry dzięki za odpowiedzi
PS. Nie piszcie, że pomysł do kitu, bo nie wiedzieliście moich notatek, które pisałęm przez bardzo długo.
Użytkownik Gy-Gy edytował ten post 04 grudzień 2005, 16:27
czyli praktycznie wymysliles jezyk ale nie umiesz go obslugiwac ...
ja bym zrobil klase parsujaca, lecisz w petli po znakach i dodajesz do jakiegos ciagu tymczasowego. jak np. natrafisz na znak | to sprawdzasz co masz w ciagu tymczasowym (powinna tam byc nazwa taga) i juz ;]
BTW to w koncu przegladarka internetowa czy co?
Tak, to przeglądarka obsługująca mój język. Pliki pobiera z normalnego serwera.
A jak napisać to cuś parsujące. Wiem, że nie wypada, ale można prosić o kod? :)
Jestem całkowity początek, ale mam fajny pomysł i w miarę prosty w wykonaniu. Wszystko wiem jak zrobić za wyjątekim tych dwóch rzeczy.
//Gy-Gy
jednak jest trzeci problem. W oczekiwaniu na odpowiedź, pisałem edytor do tego mojego języka i znów problem. Jak zrobić to tak jak w tym Twoim HateML'u, tzn. po kliknięciu na <body> (w moim przypadku <cialo|) zrobić tak, aby sie wyświetlił ObjectInspektor i zapisywał atrybuty do tegoż znacznika?
//Gy-Gy
dobra. z tym ciągiem zrozumiałem. Ale co z tymi procedurkami i ObjectInspektorem?
Użytkownik Gy-Gy edytował ten post 04 grudzień 2005, 16:52
object inspector jest oparty na moim parserze html (patrz FAQ). a wstawianie do tekstu to zwykla podmiana.
co do Twojego jezyka to pisze jakis taki prosty parser, ale jezyk nie ma wogole standartow wiec musze go zmienic
masz tu kod
type TPParam = record name, val:string; end; TPParams = class list: array of TPParam; function GetByName(name:string):string; function count:integer; end; TParser = class private fPos: integer; fText: string; procedure Parse; procedure ParseToken(s:string); function GetParams:TPParams; public constructor Create(AText:string); end;
...
function TPParams.Count: integer; begin result:=high(list); end; function TPParams.GetByName(name:string):string; var i:integer; begin result:=''; name:= lowercase(name); for i:=low(list) to high (list) do if lowercase(list[i].name) = name then begin result:=list[i].val; break; end; end; constructor TParser.Create(AText:string); begin fText:= AText; fPos:=1; Parse; end; function TParser.GetParams:TPParams; var str:string; function _trim(s:string):string; var i:integer; begin result:=''; for i:=1 to length(s) do if (s[i] in ['A'..'Z','a'..'z','1'..'9']) then result:=result+s[i]; end; begin result:= TPParams.Create; while (fPos <= length(fText)) do begin case fText[fPos] of ',','>': begin result.list[result.count].val:= str; str:=''; end; '=': begin SetLength(result.list,result.count+2); result.list[result.count].name := _trim(str); str:=''; end; else str:=str+fText[fPos]; end; inc(fPos); end; end; procedure TParser.ParseToken(s:string); var pr:TPParams; begin pr:=GetParams; if lowercase(s) = 'text' then begin showmessage('kolor: '+pr.GetByName('kolor')+#10'wielkosc: '+pr.GetByName('wielkosc')+#10'Zawartosc: '+pr.GetByName('value')); end; end; procedure Tparser.Parse; var l_token:string; begin while (fPos <= length(fText)) do begin case fText[fPos] of '<': l_token := ''; ':': ParseToken(l_token); else l_token:=l_token+fText[fPos]; end; inc (fPos); end; end;
Użytkownik migajek edytował ten post 04 grudzień 2005, 17:20
Pierwszy kod służy do...?
Drugi kod służy do...?
Ja się tam na robieniu stronek nie znam, więc mam pytanko. Jaka jest standartowa rozdzielczość w której powinna działać każda strona? Chodzi mi o to do jakiej najmniejszej rozdzielczości ma być przygotowana strona?
//Gy-Gy
Ups... Czy to drugie to nie jest przypadkiem przedłużenie pierwszego??
//Gy-Gy
W końcu nie napisałeś najważniejszego. Jak ściągnąć plik stronki do pliku tymczasowego i z niego odczytywać znaki. Proszę o szybką odpowiedź.
Użytkownik Gy-Gy edytował ten post 04 grudzień 2005, 17:43
Pierwszy kod służy do...?
Drugi kod służy do...?
Ja się tam na robieniu stronek nie znam, więc mam pytanko. Jaka jest standartowa rozdzielczość w której powinna działać każda strona? Chodzi mi o to do jakiej najmniejszej rozdzielczości ma być przygotowana strona?
//Gy-Gy
Ups... Czy to drugie to nie jest przypadkiem przedłużenie pierwszego??
dzięki. a jak z tym pobieraniem pliku i parsowanie go?
dzięki. a jak z tym pobieraniem pliku i parsowanie go?
no przeciez dalem ci klase tparser... obiekty juz se sam tworzy w funkcji ParseToken
no przeciez dalem ci klase tparser... obiekty juz se sam tworzy w funkcji ParseToken
Chodzi mi o pobranie tego pliku i jak go za pomocą tego czegoś sparsować?
Nie rozumiem tylko pobierania i zapisania kodu do stringa. Ręsztę umiem. Napisałem przykładowy kod, który jest zapisany w stringu, parsuję go, i wyświetla mi się, to co ma się wyświetlić. Jak już pisałem proszę tylko o pobieranie pliku i zapisanie kodu do stringa, albo bezpośrednie zapisane do stringa z serwera www. I nic więcej mi nie potrzeba.
//Gy-Gy
jesli nie rozumiesz tego kodu ktory dalem to nie pisz wlasnej przegladarki i wlasnego jezyka ...
Przecież najłatwiej uczyć się na przykładach. A to co piszę jest w miarę proste.
Użytkownik Gy-Gy edytował ten post 05 grudzień 2005, 16:22
Nie rozumiem tylko pobierania i zapisania kodu do stringa. Ręsztę umiem. Napisałem przykładowy kod, który jest zapisany w stringu, parsuję go, i wyświetla mi się, to co ma się wyświetlić. Jak już pisałem proszę tylko o pobieranie pliku i zapisanie kodu do stringa, albo bezpośrednie zapisane do stringa z serwera www. I nic więcej mi nie potrzeba.
Czyli mam dodać do uses TidHTTP? Jak tak zrobię to wywala błąd.
a jak piszę przy buttonie
var zmienna: String; begin get('http://jakisadres.pl/index.htm:zmienna); end;
i również wywala błąd. Co mam zrobić. Ja jeszcze nie wszedłem w zabawę z modułami, typami oraz klasami. Robię narazie programy po lamersku, a w prawdziwe programowanie wchodzę narazie badzo powoli.
Czyli mam dodać do uses TidHTTP? Jak tak zrobię to wywala błąd.
a jak piszę przy buttonie
var zmienna: String; begin get('http://jakisadres.pl/index.htm:zmienna); end;
i również wywala błąd. Co mam zrobić. Ja jeszcze nie wszedłem w zabawę z modułami, typami oraz klasami. Robię narazie programy po lamersku, a w prawdziwe programowanie wchodzę narazie badzo powoli.
Nie działa. Albo w DE2005PE nie ma tego czegoś, albo nie wiem. mam coś dopisać do uses??
Pojawia się:
[Error] Unit1.pas(30): E2003 Undeclared identifier: 'TidHTTP'
przy
ih:TidHTTP;
//sorka, zapędziłem się z tamtym stwierdzeniem :)
//Gy-Gy
Gdybyś napisał, że to trza dać z pakietu INDY Clients to bym nie zawracał tyłka. Ale wielkie dzięki. Tamten post pasował.
Ten temat już zamknięty. Pora na następny :)
====================================
Piszę post pod postem aby odświeżyć temat, więc mi tego nie wypominajcie.
Proszę o odpowiedź, czy da się wykonać procedurę która jest zapisana w zmiennej,
lub w dokumencie xml bądż ini.
PS. Poszukuję chętnych do tworzenia składni dla mojego języka.
Wynagrodzenie:
-Adresy stron z darmowymi dodatkami do komórek (aplikacje i gry java, tapety, dzwonki itp...)
-Panel administracyjny na stronie internetowej tej oto tworzonej przeglądareczki.
-jak wymyślę coś jeszcze do dopiszę.
Aha. Zgłoszenia proszę kierować na forum lub na grzegorzkrakowa@o2.pl, ponieważ nie za często spoglądam do prywatnych wiadomości.
Użytkownik Gy-Gy edytował ten post 08 grudzień 2005, 15:48
nie odswierza sie tematow w ten sposob...
odp: mozna. poczytaj o jezykach skryptowych ... <_<