TSPablos Napisano Lipiec 30, 2008 Zgłoś Share Napisano Lipiec 30, 2008 Witam. Mam tablicę złożoną z wartości integer i string: VarArrayOf([1, 'dupa1', 2, 'dupa2', 3, 'dupa3']); 7jhr,-ibs(vv'Ś h-jZy-j'iźŚĄi,ćikŹĄ^\"Ą^włzl\"reąjhrs9yj7WŁŚ\"x^wŁy.-Śxvbz)(s7ęm'kś-)-ŚźŚ+'hMŚŁjJ#z& lt;Ś(źźŃąŃŃŃŹ)QŹŹ ŹŹŹŹŹŹŹŹźź )QąźąŃ )Y=Ąmąt( Tylko że teraz liczby w tablicy zostały zamienione z integer w stringi i tablica mi nie działa. Jak mogę zrobić, aby zachować taki model kodu jaki podałem, jednak aby w tablicy liczby pozostały Integerami? Czego mogę użyć zamias EDIT'a który nieporządanie zamienia mi wszystko na STRING? Link do komentarza Udostępnij na innych stronach More sharing options...
Dexarz Napisano Lipiec 30, 2008 Zgłoś Share Napisano Lipiec 30, 2008 z funkcji strtoint ,która zamienia zmienną typu string( nie dosłownie) w liczbe typu całkowitego powodując że traktowane jest jako liczba a nie string ... Aktualnie piszę 32 bitowy system operacyjny. ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40% Stick's Adventure 3 - 0% Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP Przykład programu w ASE2.0: <?arg #CreateProcs; $i:?; #For('$i,10,1,@Lab');@Lab; #Sleep(100); #Message("Ten komputer ulegnie autodestrukcji za $i sekund"); #Retf; #Message('Dead'); arg?> Link do komentarza Udostępnij na innych stronach More sharing options...
TSPablos Napisano Lipiec 30, 2008 Autor Zgłoś Share Napisano Lipiec 30, 2008 z funkcji strtoint ,która zamienia zmienną typu string( nie dosłownie) w liczbe typu całkowitego powodując że traktowane jest jako liczba a nie string ... arrayof([integer, string, integer, string, integer, string]); string:='integer, string, integer, string, integer, string'; arrayof([string]); To jeszcze mi wytłumacz jak mogę użyć strtoint żeby w tablicy z stringa zrobiły się na przemian po przecinku: integer, string, integer, string; Będę wdzięczny.. Link do komentarza Udostępnij na innych stronach More sharing options...
Brainer Napisano Lipiec 30, 2008 Zgłoś Share Napisano Lipiec 30, 2008 A nie lepiej skorzystać z funkcji Format? .: Brainer :. patrick.nusbaum@gmail.com Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 30, 2008 Zgłoś Share Napisano Lipiec 30, 2008 array of Variant; pozatym przyklad z dupa1..dupaN wystawia ci doskonala opinie na forum publicznym.... Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
TSPablos Napisano Lipiec 31, 2008 Autor Zgłoś Share Napisano Lipiec 31, 2008 Format odpada bo mi też wszystko zamienia na jeden wielki string... Ok dajmy na to że użyję array of Variant. W poniższym kodzie mam podaną statyczną ilość tablic ze statycznymi jej wartościami. tabliva:= VarArrayCreate([0,5], varVariant); tablica[0]:=0; tablica[1]:=stra; tablica[2]:=7; tablica[3]:=strb; tablica[4]:=19; tablica[5]:=stra; A jak mam określić poszczególne wartości tablic kiedy ilość tablic jest zmienną i - ([0,i] ? Wartość i w moim przypadku jest zwracana przez pewną pętlę, która za każdym wykonaniem oddaje inną wartość i. jak więc teraz odnieść się do każdej z tablic, nie znając ich ilości? Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Lipiec 31, 2008 Zgłoś Share Napisano Lipiec 31, 2008 nie kaman dlaczego tak utrudniasz sobie życie lepiej zrób tablice stringów i używaj funkcji IntToStr oraz StrToInt jeśli masz pętlę to możesz sprawdzić czy wartość jej licznika jest podzielna przez 2 bez reszty czyli czy jest parzysta... Pozdrawiam! Link do komentarza Udostępnij na innych stronach More sharing options...
TSPablos Napisano Lipiec 31, 2008 Autor Zgłoś Share Napisano Lipiec 31, 2008 nie kaman dlaczego tak utrudniasz sobie życie lepiej zrób tablice stringów i używaj funkcji IntToStr oraz StrToInt jeśli masz pętlę to możesz sprawdzić czy wartość jej licznika jest podzielna przez 2 bez reszty czyli czy jest parzysta... Pozdrawiam! No ok z funkcją strtoint sobie poradzę, tylko jeszcze powiedzcie mi jak do pętli dopisać, żeby aż do zakończenia jakiegoś warunku do Tablicy stringów dodawała kolejne stringi? while i<=10 do begin inc(i); //dodaj do tablicy stringów jakiś string end; To poradził bym sobie ze swoim problemem w ten sposób, że najpierw pętlą stworzę tablicę stringów, a potem do swojej tablicy variantów przypiszę te stringi do parzystych wartości tablicy, a nieparzyste zamienię funkcją "strtoint". Link do komentarza Udostępnij na innych stronach More sharing options...
TSPablos Napisano Lipiec 31, 2008 Autor Zgłoś Share Napisano Lipiec 31, 2008 jak czytam to co napisałem, to jeszcze bardziej gmatwam sobie sprawę. OD NOWA.. PO KOLEI PANOWIE: 1. Mam pętlę która tworzy ciąg wartości dla pewnej tablicy. Ten ciąg wartości to na przemian wartości integer i string. Teraz te wartości integer i string dodaję do Memo1. jako string oraz inttostr(integer). Teraz chce całe memo1. przypisać jako wartości dla mojej tablicy, tylko że mam problem bo to są same stringi co nie? Patrzcie: tablica:= vararrayof([Memo1.]); Memo1. nie spełnia swojego zadania bo zamist; tablica:= vararrayof([integer, string, intege, string]); jest: tablica:= varattayof(['integer, string, integer, string]); // jak widzicie wszystko jest jednym wielkim stringiem :/ 2. Jak więc bez użycia MEMO1. w pętli mogę przypisać do mojej TABLICY wartości integer i string po kolei po przecinku? Bardzo proszę o przykładowy kod użycia 3. chodzi mi o coś takiego: i:0; while (warunek nie zostanie spełniony) do begin //do tablicy[i] nadaj 'stringA'; //do tablicy[i+1] nadaj IntegerA; inc(i,2); end; tablica:=vararrayof(['dodawanie wyników z pętli po przecinku; naprzemian integery i stringi']); Link do komentarza Udostępnij na innych stronach More sharing options...
Max1414 Napisano Lipiec 31, 2008 Zgłoś Share Napisano Lipiec 31, 2008 Zrób sobie np. tablice stringów var Tab: array[0..10] of String; Int: Integer; Str: String; begin Int:=5; Str:='tekst'; Tab[0]:= IntToStr(Int)+','; Tab[1]:= Str + ','; end; podstawy...podstaw... Moje projekty: http://wojciechkulik.pl Link do komentarza Udostępnij na innych stronach More sharing options...
TSPablos Napisano Lipiec 31, 2008 Autor Zgłoś Share Napisano Lipiec 31, 2008 Ehhh.. jeszcze raz, bo widzę że macie problemy z czytaniem! Napiszę najprościej jak się da: tablica:=arrayof([jakies wartosci tej tablicy]); :#zmibqkkZO*sn*+^ŁŚ$h)Ękx\"{^ęn%yLjghudŁ )śY-ĆŚjvłłjeihr6śWć\"x^wŁy.ĄZę{ś\"*nI4H4j+k2 LAD3jJezjhr$DFSa(Ż<*mk*bąhL\0K jJ0jhr*hł73z g^3n*+0,O)dx'Ś-Ł:n$rKkzpźŚZ]#jHx^Ęmibs+rJ(ve)^Ąw8&ŚĆĘłjxućĘvĄŚ))QltMŃ))Qlt%ŃQMŃĄ%Ź)QltMŃŹ(źź)Qlt%ŃQMŃĄ%Ź)( NIE PASUJE!!!!!! A DLACZEMU?:| A dlatemu że tu mamy określoną ilość wartości tablic = 10. Kolejny raz więc ponawiam swoje pytanie, jak mogę stworzyć tablicę, której ilość wartości będzie równa ilości stringów i integerów które wykreowała mi pętla? i jak następnie do zbioru tych elementów tablicy które powstały przypisać kolejne stringi i integery które mi wykreowała pętla? Przejdź na górę strony Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Lipiec 31, 2008 Zgłoś Share Napisano Lipiec 31, 2008 to źle?? i:0; while (warunek nie zostanie spełniony) do begin tablicy[i]:=Memo1.Lines[i]; tablicy[i+1]:=StrToInt(Memo1.Lines[i+1]); inc(i,2); end; nie kaman?? Link do komentarza Udostępnij na innych stronach More sharing options...
TSPablos Napisano Lipiec 31, 2008 Autor Zgłoś Share Napisano Lipiec 31, 2008 to źle?? i:0; while (warunek nie zostanie spełniony) do begin tablicy[i]:=Memo1.Lines[i]; tablicy[i+1]:=StrToInt(Memo1.Lines[i+1]); inc(i,2); end; nie kaman?? No właśnie źle bo mi wywala błąd że nie może określić wartość elementów tablicy Link do komentarza Udostępnij na innych stronach More sharing options...
Max1414 Napisano Lipiec 31, 2008 Zgłoś Share Napisano Lipiec 31, 2008 ehh no to: var Tab: array of String; Int, Size: Integer; Str: String; begin Int:=5; Str:='tekst'; Size:=2; SetLength(Tab, Size); Tab[0]:= IntToStr(Int)+','; Tab[1]:= Str + ','; end; Moje projekty: http://wojciechkulik.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Cubixmeister Napisano Lipiec 31, 2008 Zgłoś Share Napisano Lipiec 31, 2008 Masz trzy możliwości 1. Powiedz nam, co chcesz w ten sposób osiągnąć, bo na razie pokazujesz jak... 2. Tak jak mówił Toster, użyj typu Variant (IMO najbardziej elegancki rozwiązanie) 3. Rekordy wariantowe (Unie): type TCostam = record case Boolean of True: ( Str: String ); False: ( Int: Integer ); end; end; TCostamArray = array of TCostam; var Tablica: Array [1..10] of TCostam;mw+hŹ\"rvŁ'Łmzl&lĆąx3kŁł%3s7Ż& lt;izZaYHĘX[P^N[Ó[ĘNN[YY[N SĘXHY XHH H[H[ÓY XWKNN[ÓY [XWK[ JN[[ Link do komentarza Udostępnij na innych stronach More sharing options...
Max1414 Napisano Lipiec 31, 2008 Zgłoś Share Napisano Lipiec 31, 2008 @Cubixmeister - wiem xD ale najprościej ujmując, to chyba o to chodzilo xD Moje projekty: http://wojciechkulik.pl Link do komentarza Udostępnij na innych stronach More sharing options...
TSPablos Napisano Lipiec 31, 2008 Autor Zgłoś Share Napisano Lipiec 31, 2008 "1. Powiedz nam, co chcesz w ten sposób osiągnąć, bo na razie pokazujesz jak..." Chcę w ten sposób osiągnąć coś takiego: tablica:= vararrayof([0, 'jakies', 7, 'inne', 9, 'stringi', 16, 'za', 21, 'każdym', 71, 'razem']); (Ęśłł\"q\"zh('!'3oMZ0ŁykZ0Ł{k\"zhZ\"s9z'&o,2WZ- ŚĄŚ)ŃąĄląźąźŃą źt( Link do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Lipiec 31, 2008 Zgłoś Share Napisano Lipiec 31, 2008 Poczytałem, zobaczyłem, że się męczycie z wyciągnięciem danych z takowego Stringa i TSPablos napisałem Ci pewną pomocną funkcje... biggrin.gif Sugerowałem się funkcją "explode" z PHP biggrin.gif function PosEx(SubStr, Str: string; PosStart: Integer): Integer; begin if Pos(SubStr, copy(Str, PosStart, Length(Str)-PosStart+1))=0 then Result:=0 else Result:=Pos(SubStr, copy(Str, PosStart, Length(Str)-PosStart+1))+PosStart-1; end; function StringToStringList(pString : String) : TStringList; var lNextSeparator, lEndStrLen, lNextStrPos : integer; begin Result := TStringlist.Create; lNextSeparator := 0; lEndStrLen := 0; lNextStrPos := 0; while lNextSeparator <> length(pString)+1 do begin lNextSeparator := PosEx(',', pString, lNextSeparator+1); if (lNextSeparator = 0) then lNextSeparator := length(pString)+1; Result.Add(copy(pString, lNextStrPos, (lNextSeparator-lEndStrLen)-1)); lEndStrLen := lNextSeparator; lNextStrPos := lNextSeparator+1; end; end; Ę(n#)uŚ()MŃMŃQMŃ1QMPąQMPltźź]ŹMŃŃźQMP()%Ń%ŃQMŃĄMŃQMŃ1QMPąQMPltźź]Ź%ŃŃź()MŃMŃQMŃ1QMPąQMPltźź]ŹMŃŃźQMP()%Ń%ŃQMŃĄMŃQMŃ1QMPąQMPltźź]Ź%ŃŃź( Twoim zadaniem będzie jedynie stworzenie sobie funkcji do naprzemiennego tworzenia zmiennych Integer. To takie rozwiązanie z mojej strony. Pozdrawiam. Prawdziwy programista wiesza sie wraz ze swoim programem. Link do komentarza Udostępnij na innych stronach More sharing options...
Toster Napisano Lipiec 31, 2008 Zgłoś Share Napisano Lipiec 31, 2008 W sumie przeczytalem to pobierznie ale widac na pierwszy rzut oka ze autor ma zle podejscie do problemu. Jesli ZAWSZE jest kolejnosc Int, string to nie robi sie jakis wymyslnych tablic stringow, intow, variantow itp tylko jak ktos wyzej napisal rekordy. A jeszcze lepiej klasy + TList. Ewentualnie TCollection ewentualnie TQueue albo TOwnedList. Zamiast wymyslac takie potworki siadz i sie zastanow co ty wlasciwie chcesz... Tylko pliz nie pisz po raz n ty ze chcesz int, str, int, str bo to kazdy widzi. Albo ty nas nie rozumiesz albo my ciebie, przy czym statystyka mowi ze raczej ty nas. Always Dark<br /> Link do komentarza Udostępnij na innych stronach More sharing options...
Cubixmeister Napisano Lipiec 31, 2008 Zgłoś Share Napisano Lipiec 31, 2008 Jak zwykle zgadzam się z Tosterem ;-) Spike: Delphi nie ma Garbage-Collectora i twój kod (przykład) robi fajne memory-leak`i Link do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Sierpień 1, 2008 Zgłoś Share Napisano Sierpień 1, 2008 Cubixmeister Jak zwykle czepiasz się spraw, które akurat najmniej dotyczą rozwiązania problemu... Wyciek pamięci jest... owszem, lecz to pisane było z pamięci na szybko i nie w głowie mi było zwolnienie RAMu po wykonaniu funkcji... Podałem tylko przykład funkcji, która jak PHP-owska "explode" wyciąga z Łańcucha znaków wartości. Pozdrawiam. Prawdziwy programista wiesza sie wraz ze swoim programem. Link do komentarza Udostępnij na innych stronach More sharing options...
HNB Napisano Sierpień 1, 2008 Zgłoś Share Napisano Sierpień 1, 2008 Każdy lubi wtrącić swoje 3 grosze . Zwłaszcza Polacy ... Ot taki dziwaczny naród pełen ekspertów i mądrzyków soon Delphi will be only for veterans and finally we all will die at the end… delphi.dathox.com - nowinki z świata Delphi/Pascala only programmers and drug dealers call their customers "users" Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą. Link do komentarza Udostępnij na innych stronach More sharing options...
Cubixmeister Napisano Sierpień 1, 2008 Zgłoś Share Napisano Sierpień 1, 2008 Spike, chodzi o to że tutaj jest od groma początkujących, oni nie widzą na pierwszy rzut oka takich rzeczy, a za chwile ich program o dziwo zajmuje 20MB pamięci... ;-) Dobra, koniec tego OT ;P Link do komentarza Udostępnij na innych stronach More sharing options...
TSPablos Napisano Sierpień 1, 2008 Autor Zgłoś Share Napisano Sierpień 1, 2008 Wkońcu zrobiłem Max1414 dzięki za pomoc. Wystarczyło mi napisać, że istnieje funkcja SetLength Link do komentarza Udostępnij na innych stronach More sharing options...
Max1414 Napisano Sierpień 1, 2008 Zgłoś Share Napisano Sierpień 1, 2008 CYTAT(Cubixmeister @ czw, 31 lip 2008 - 15:57) Max1414: Straszna prowizorka ;-) CYTAT(Max1414 @ czw, 31 lip 2008 - 16:30) @Cubixmeister - wiem xD ale najprościej ujmując, to chyba o to chodzilo xD Wkońcu zrobiłem Max1414 dzięki za pomoc.Wystarczyło mi napisać, że istnieje funkcja SetLength hah... a nie mówiłem Moje projekty: http://wojciechkulik.pl Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.