Tekst wpisywany w konsoli jako cześć nazwy zmiennej

Tekst wpisywany w konsoli jako cześć nazwy zmiennej
YL
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tarnów
  • Postów: 20
0

Witam, mam oto taki fragment kodu:

Kopiuj
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):

Kopiuj
 
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.

sihox
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
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ć:

Kopiuj
xstanowiska := 'x' + stanowisko;
flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12316
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:

Kopiuj
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.

YL
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tarnów
  • Postów: 20
0

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

Kopiuj
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:
Kopiuj
   xstan:=Xabc1;   
end;
  1. Wpisuję teraz sobie w konsoli ciąg znaków w i chcę by został zachowany następujący sens programu:
Kopiuj
   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ą.

MI
  • Rejestracja: dni
  • Ostatnio: dni
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ć.

YL
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tarnów
  • Postów: 20
0

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

MI
  • Rejestracja: dni
  • Ostatnio: dni
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...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.