Smyčka for .. in array – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Smyčka for .. in array – Delphi – Fórum – Programujte.comSmyčka for .. in array – Delphi – Fórum – Programujte.com

 

oxidián0
Grafoman
3. 5. 2018   #1
-
0
-

Chyba 1.: Operator not applicable to this operand type

Chyba 2.: Expression expected but 'BEGIN' found

// 1. deklarace

Jazyky : Array [0..maxTestItems-1] of string;

// 2. iniciace a načtení dat do Jazyky

// 3. zkouším projít pole stringů

  for s in Jazyky do
    begin

   // some code here

   end;


Nerozumím té chybě. Podle příkladu by to mělo fungovat.

Nahlásit jako SPAM
IP: 78.102.61.–
JiVi
~ Anonymní uživatel
18 příspěvků
3. 5. 2018   #2
-
0
-

tj obecny navod na prochazeni pole

melo by to byt cca takto:

procedure a ;
 Jazyky : Array [0..maxTestItems-1] of string;
 s:string
begin
  for s in Jazyky do
    begin

   	//some code here

   end;
end;
Nahlásit jako SPAM
IP: 194.228.23.–
oxidián0
Grafoman
3. 5. 2018   #3
-
0
-

Vždyď to tak mám, tak co znamená ta chybová hláška?

 Zapoměl jsem uvést, ale mám to tam:

s: string;
Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
3. 5. 2018   #4
-
0
-

#3 oxidián
proč chceš použít zrovna tuhle konstrukci, Já myslím, že na obyčejné pole to nebude fungovat, je to konstrukce pro procházení kolekcí, které mají integrovány iterátory, kdežto Array. je pouze prostor pro data určitého typu. U stringů je to prostor ukazatelů na jednotlivé stringy v poli, místo pro stringi si podle jejich velikosti pak program alokuje 

Ta konstrukce by měla jít použít, kdybys měl Jazyky definované jako TStrings nebo TStringList.

Také to chce myslet na použití  - třeba ty Jazyky máš tam pro ně spoustu údajů v různých polích někdy array jindy TString/..s,..List/, podle mě by bylo lepší je zabalit do třídy, bude to přehlednější a pro programování po pauze lépe srozumitelné. 

Víš že  TStringList může mít 2 hodnoty Key a Value?

Nahlásit jako SPAM
IP: 91.139.9.–
oxidián0
Grafoman
3. 5. 2018   #5
-
0
-

#4 MilanL

Našel jsem: "Delphi 7 does not support for .. in"
Mě by to přišlo pohodlnější.

Ano, je to nepřehledné o té nutnosti to zabalit vím. Jen jsem s třídou ještě nedělal, tak to odkládám.

Nahlásit jako SPAM
IP: 78.102.61.–
MilanL+1
Grafoman
3. 5. 2018   #6
-
0
-

#4 MilanL
Omluva, tak to procházení pomocí FOR-IN funguje i na obyč. pole, ale pozor má to omezení, aktivní prvek je jen pro čtení nelze ho měnit, tzn např podmínka if s=' ' then  ti fungovat bude, ale s := 'xx' fungovat nebude.

Nahlásit jako SPAM
IP: 91.139.9.–
Sniper
~ Anonymní uživatel
215 příspěvků
3. 5. 2018   #7
-
0
-

Tak hlavně, jak už bylo zmíněno, D7 neumí FOR-IN, to bylo přidaný v D2007. A ohledně TStrings/TStringList - TStrings se abstraktní třída, používej ji jenom pro deklaraci parametrů, nikdy nevytvářej instanci.

Nahlásit jako SPAM
IP: 92.240.176.–
oxidián0
Grafoman
3. 5. 2018   #8
-
0
-

#7 Sniper
Proč ne? Však tu instanci pak mohu odstranit.

Nahlásit jako SPAM
IP: 78.102.61.–
oxidián0
Grafoman
3. 5. 2018   #9
-
0
-

Nechtěli byste se mi na to mrknout? Chyby co mi to házelo jsem odstranil. Teď pracuji na menu testy.

Jen to spusťte, a klikněte na menu Testy. Tam jsou ty automaticky vytvořené položky. Člověk má vlastně vybrat jeden jazyk, ze kterého chce dělat testy. Je otázka proč tam je tolik prázdných položek dole.

https://sourceforge.net/projects/uc-heb/files/developer_backups/2018/finished/ucheb.24.zip/download

Okruhy přesně si nepamatuji na co jsou, ale měly by tam být ještě učebnice. Po vybrání jazyka se načtou učebnice dostupné pro daný jazyk. Např. jeden jazyk je možné cvičit z různých zdrojů.

Nahlásit jako SPAM
IP: 78.102.61.–
oxidián0
Grafoman
3. 5. 2018   #10
-
0
-

Můžete mi dát příklad jak ty jazyky zabalit do třídy?

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Soubor1: TMenuItem;
  private
    langMenuItems : array of TMenuItem;
    SubMenuItems : Array of TMenuItem;
    SubMenuItemsLoaded : Array [0..maxTestItems-1] of boolean;
    TestyDirs, SubDirs : TStringList; // for folders search
    procedure JazykyInitiate;
    procedure DynMenu;
  public
    JazykyIndexy : TStrings;
    Jazyky : Array [0..maxTestItems-1] of string; // Language names ... associated with JazykyFolders
    JazykyFolders : Array [0..maxTestItems-1] of string; // Folder names associated with Jazyky menu items
    JazykySelected : Array [0..maxTestItems-1] of string; // Jazyky sub-folder folder specification
  end;

K tomu ještě patří

procedure TForm1.readINI;

procedure TForm1.writeINI;

Co potřebuju udělat je, aby procedury a proměnné

.readINI

.writeINI


.JazykyInitiate

.DynMenu
apod. byly pod jednou instancí. Abych ty data, ohledně adresářů, jazyků, knih, vybraných apod. měl vše pod jednou instancí.

Nahlásit jako SPAM
IP: 78.102.61.–
Sniper
~ Anonymní uživatel
215 příspěvků
3. 5. 2018   #11
-
0
-

Nápověda: "TStrings contains abstract or, in C++ terminology, pure virtual methods and should not be directly instantiated.". Prostě, pokud vytvoříš instanci TStrings (nebo jiný abstraktní třídy), a náhodou zavoláš něco, co pracuje s abstraktní metodou, tak to spadne na abstract exception. Zrovna TStrings např nemá vůbec implementovaný getter pro property Strings[].

Nahlásit jako SPAM
IP: 92.240.176.–
oxidián0
Grafoman
3. 5. 2018   #12
-
0
-

Zrovna teď bych raději vyřešil jak ty jazyky zawrapovat abych se v tom neztratil.

Já treba k tomu poli jazyků nevím kolik těch jazyků tam je. To je problém. Wrapper by se mohl jmenovat Testy a obsahoval by člena langCount kam bych tu informaci uložil během načítání souboru ini.

Nahlásit jako SPAM
IP: 78.102.61.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 20 hostů

Podobná vlákna

Delphi 7 - smycka — založil Cola-loka

Smycka v Tkintru — založil john-smith

ATmega a smyčka while — založil Palkic.89

Nekonečná smyčka — založil miguel

časová smyčka — založil xp

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý