Tekst wpisywany w konsoli jako cześć nazwy zmiennej

0

Witam, mam oto taki fragment kodu:

write('Wybierz stanowisko: ');
readln(stanowisko);

stanowisko to zmienna typu string. Dla przykładu gdy wpiszę sobie znak w, to chciałbym by automatycznie do iksa dopisywał się znak w, dzięki czemu do nowej zmiennej (xstanowiska) przypisywana jest poprzednio obliczona (xw). Algorytm powinien działać w taki sposób (ale oczywiście powinien być inaczej napisany, o czym niżej):

 
xstanowiska:=xw;

Powinno działać analogicznie dla innych wpisywanych znaków, czy ciągu znaków (np: wpiszę sobie bla to xstanowiska:=xbla, wpiszę sobie costam123 to xstanowiska:=xcostam123 itp.). Jak to zrobić? Chodzi mi o to, czy istnieje jakaś konkretna funkcja, która by to załatwiła, czy musiałbym to zapisać za pomocą instrukcji warunkowych? Niestety ciężko mi jest nazwać ten problem, więc nawet nie wiem co wpisać w wyszukiwarce.

0

Jeśli dobrze rozumiem, to chcesz po prostu skleić sobie ciągi znaków.
Możesz po prostu użyć operatora +.
Jeśli xstanowiska i stanowisko to zmienne typu string to możesz zapisać:

xstanowiska := 'x' + stanowisko;
0

Dziwnie to opisałeś, ale jeśli myślisz o tym, aby dynamicznie zmieniać nazwę zmiennej, to jest to awykonalne; Jeżeli natomiast chcesz do nowej zmiennej wpisać wartość starej zmiennej plus dodatkowe znaki płączone w jeden ciąg znaków, to skorzystać z operatora +, np. tak:

var
  Stanowisko, xStanowisko: String;
begin
  {...}
  ReadLn(Stanowisko);

  xStanowisko := 'x' + Stanowisko;
//xStanowisko := Format('x%s', [Stanowisko]);

A jeśli żadne z powyższych nie tłumaczy Twojego problemu, to opisz to jeszcze raz - tym razem dokładniej;

Chodzi mi o to, czy istnieje jakaś konkretna funkcja, która by to załatwiła [...]

Możesz skorzystać z funkcji Concat.

0

Ok, to napiszę jeszcze raz, bo moje oznaczenia i wyjaśnienia mogą wprowadzać w błąd. Mamy początkową część kodu

var znaki: string;
    xstan, Xw, Xabc1: real;
begin
   Xabc1:=123.456;
   Xw:=777.888;   
   write('Wybierz stanowisko: ');
   readln(znaki);

Dla lepszego zobrazowania problemu podam dwa przykłady. Dalsza część kodu (przykłady 1, 2).

  1. Wpisuję teraz sobie w konsoli ciąg znaków abc1 i chcę by został zachowany następujący sens programu:
   xstan:=Xabc1;   
end;
  1. Wpisuję teraz sobie w konsoli ciąg znaków w i chcę by został zachowany następujący sens programu:
   xstan:=Xw;   
end;

Czyli: to co wpisałem sobie w konsoli dopisuje się do dużego iksa (X), program traktuje to jako wcześniejszą zmienną dzięki czemu xstan ma przypisaną nową wartość liczbową.

2

W trakcie działania programu nie istnieją już Xabc1 ani Xw jako nazwy. Te nadane przez Ciebie nazwy istnieją do momentu kompilacji. Po kompilacji nie ma już zmiennych, nie ma ich nazw, są jedynie adresy w pamieci. Więc podawanie nazwy zmiennej w trakcie działania programu w tym wypadku nie zadziała. Musiałbyś zrobić switch-case użyć i uwzględnić wszystkie przypadki na które chcesz reagować.

0

Ok, dzięki za odpowiedź. Liczyłem, że obędzie się bez instrukcji warunkowych.

0

Nie wiem które Delphi używasz, ale możesz zawsze zrobić sobie to na słowniku http://docwiki.embarcadero.com/CodeExamples/XE7/en/Generics_Collections_TDictionary_%28Delphi%29 tylko niestety nie wiem od kiedy słowniki sa dostępne w Delphi...

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