nyac55 Posted November 6, 2015 Report Share Posted November 6, 2015 (edited) Witam wszystkich. Jak w temacie mama problem z językiem MYSQL, a mianowicie chciałbym utworzyć zmienną łańcuchową, przechowującą takie znaki np. 89KL-OP12O-GT8912L, czyli 4 znaki myślnik, 5 znaków, myślnik, 7 znaków...Zamieszczę tutaj fragment kodu, który stworzyłem i opiszę dokładnie o co chodzi:BEGINSet @sign= 'ABCDEFGHIJKLMNOUPRSTVWQXYZ1234567890';Set @sign1= 'ABCDEFGHIJKLMNOUPRSTVWQXYZ';Set @sign2= '1234567890';Set @a = 1;Set @z = 36;Set @a1 = 1;Set @z1 = 26;Set @a2 = 1;Set @z2 = 10;Set @c1 = 1;Set @c2 = 3;#Set @znak ='';set @text = '';SELECT @text;# koreSet @c = (SELECT FLOOR(@c1 + (RAND() * (@c2 - @c1 + 1))));SELECT @c;Set @x1 = (SELECT FLOOR(@a1 + (RAND() * (@z1 - @a1 + 1))));Set @x2 = (SELECT FLOOR(@a2 + (RAND() * (@z2 - @a2 + 1))));Set @x = (SELECT FLOOR(@a + (RAND() * (@z - @a + 1))));SELECT @x1;SELECT @x2;SELECT @x;# --------------------------------# IF wybór alfabetuIF @c=1 THENSet @znak=@znak + SUBSTRING(@sign1,@x1,1);SELECT SUBSTRING(@sign1,@x1,1);SELECT @znak;ELSEIF @c=2 THENSet @znak=@znak + SUBSTRING(@sign2,@x2,1);SELECT SUBSTRING(@sign2,@x2,1);SELECT @znak;ELSEIF @c=3 THENSet @znak=@znak + SUBSTRING(@sign,@x,1);SELECT SUBSTRING(@sign,@x,1);SELECT @znak;ELSESELECT 'blad';END IF;SELECT @text;#ELSEIF @c=2 THEN#SELECT SUBSTRING(@sign2,@x2,1);#Set @znak=@znak + SUBSTRING(@sign2,@x2,1);#SELECT @znak;#ELSEIF @c=3 THEN#SELECT SUBSTRING(@sign,@x,1);#Set @znak=@znak + SUBSTRING(@sign,@x,1);#SELECT @znak;#END IF;# --------------------------------# LOOP na 4 wywołania 2 koniec#ELSE#SELECT @b;#LEAVE ciag_1_loop;#END IF;#END LOOP ciag_1_loop;ENDTen fragment kodu, to procedura, która będzie wywoływana z zewnątrz przez inną procedurę.Chodzi o to, że mamy trzy łańcuchy znaków (tekst), każdy ma inną długość, a zatem funkcją rand losujemy, jakiś znak dla każdego z nich. Losujemy także cyfrę 1-3, aby wprowadzić losowość albo cyfra albo litera na danym polu. Następnie próbowałem zrobić pętlę, która robi następującą rzecz:mając wylosowaną cyfrę, bądź literę podstawia ją pod zmienną i dokleją kolejną wylosowaną i tak 4 razy. Gdyby to się udało można by było zrobić to samo dla 2 i 3 ciągu i zapisać to wszystko pod 1 zmienną oddzieloną - (myślnikami) lub od razu mając 1 ciąg dokleić myślnik i doklejać kolejne ciągi.Dodatkowo problem jest gdy 1 znak to cyfra, wtedy nie mogę dokleić litery i na odwrót gdy 1 znak to litera nie mogę dokleić cyfry do zmiennej. Edited November 6, 2015 by nyac55 Quote Link to comment Share on other sites More sharing options...
nyac55 Posted November 19, 2015 Author Report Share Posted November 19, 2015 EDIT: Już sobie poradziłem. Pojedyncze znaki można losować np. przy użyciu funkcji RAND, następnie IFami zaprogramować, aby zmienna zwracała kod ASCII danego znaku. Mając to wystarczy znaki łączyć (1 po 2)* -(to nie takie proste, mimo wszystko dla początkujących użytkowników) i wyświetlać przy użyciu funkcji SELECT CHAR();np.SET @text=(SELECT CHAR(@gog1,@gog2,@gog3,@gog4,@gog5,@gog6,@gog7));Z tym, że ja dla każdego obiegu umieszczałem zmienne po inną zmienną @gog, np. dla 1 obiegu było to @gog1, dla 2 @gog2 itd.W ten sposób możemy losować kolejne znaki i wyświetlać pod 1 zmienną.Proszę o zamknięcie tematu Quote Link to comment Share on other sites More sharing options...