Skocz do zawartości

[delphi] konwersja typów w tablicy


TSPablos

Polecane posty

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

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

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

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

nie kaman dlaczego tak utrudniasz sobie życie :rolleyes:

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

nie kaman dlaczego tak utrudniasz sobie życie :rolleyes:

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

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

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

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

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[[

Obrazek
Link do komentarza
Udostępnij na innych stronach

"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

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

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 />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Cubixmeister Jak zwykle czepiasz się spraw, które akurat najmniej dotyczą rozwiązania problemu... Wyciek pamięci jest... :D 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

Każdy lubi wtrącić swoje 3 grosze ;). Zwłaszcza Polacy :P... Ot taki dziwaczny naród :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

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

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...