Problém s Lazarusom

Programovacie jazyky, rady, poradňa...
Liho
Novice
Novice
Príspevky: 4
Registrovaný: 07 dec 2011, 17:05

Problém s Lazarusom

Príspevok od používateľa Liho »

Chcem sa opýtať, či by niekto vedel poradiť s Lazarusom.
Doma mám lazarus a v škole sa venujem INF, programujem.
Chcem vytvoriť program pre otca, a neviem si pomôcť s jedným problémom.
Chcel by som program, ktorý vyhľadá v nejakom textovom súbore.txt slovo, ktoré zadáme do Edit1.text a na plochu nám vypíše, či sa tam toto slovo nachádza. Ak sa tam nenachádza, takisto nám to vypíše.
Zatiaľ mám toto :
Button1:

Kód: Vybrať všetko

var
 subor: TextFile;
 a,b: String;
 begin
image1.canvas.fillrect(image1.clientrect);
 AssignFile(subor, 'kalendare.txt');
 Reset(subor);
 a:= edit1.text;
begin
  Readln(subor, b);
  if a = b then
   begin
     image1.canvas.textout(10, 10, 'mam');
   end;
  if a <> b then
     begin
     Image1.canvas.textout(10,10, 'nemam');
     end;
  if a = 'Edit1' then
   begin
   image1.canvas.textout(10,10, 'nic nieje napisane');
   end;
  CloseFile(subor);
end;
 end;  


>> Nedokážem si stým pomocť, potreboval by som pomôcť, ako zapísať moje "b" ktoré vidíte, aby pre "b" platilo, že je to vlastne súbor, teda jeho obsah... Dostal som sa aj do štádia, keď tam zadám príkaz Eof, že mi vyhodí tab. "access denied / File cannot open"
Viete niekto poradiť ? Vďaka !
dykeer
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 102
Registrovaný: 02 jan 2011, 21:21
Kontaktovať používateľa:

Re: Problém s Lazarusom

Príspevok od používateľa dykeer »

No musis cez while prechadzat suborom a nacitavat riadky. Ak mas nacitany riadok, pozries cez Pos, ci sa tam slovo nachadza alebo nie. Ak ano, ukoncis cyklus while a vypises ze nasiel, inak pokracujes dalej.

Kód: Vybrať všetko

...
var nasiel:boolean;
riadok:string;
....

 nasiel:=false;
 While (EOF(subor)=false) and (nasiel=false) do
 begin
 readln(subor,riadok); //nacitam riadok do premenej riadok
   if Pos(Edit1.text,riadok)<>0 then nasiel:=true;
 end;
Liho
Novice
Novice
Príspevky: 4
Registrovaný: 07 dec 2011, 17:05

Re: Problém s Lazarusom

Príspevok od používateľa Liho »

no to mi velmi pomohlo, ale napriek tomu tam ja osobne vidim problem, je možné to zapísať tak, aby mi pri zadaní do edit1 napriklad slova "ahoj" bralo do uvahy cele slovo a nie len prve pismeno ? pretože ked zadám do edit iba jedno pismeno, vypise mam/nemam, ale ked zadam slovo, tak to mi naskoci len prazdny image.

//autoeditácia príspevku (08 Dec 2011, 19:44)
procedure TForm1.Button1Click(Sender: TObject);
var
subor: TextFile;
riadok, a: string;
nasiel: Boolean;

begin

image1.canvas.fillrect(image1.clientrect);
AssignFile(subor, 'kalendare.txt');
Reset(subor);
nasiel:= false;
a:= edit1.text;

begin
while (EOF(subor)=false) and (nasiel=false) do
begin
Readln(subor, riadok);
if Pos(Edit1.text, riadok)<>0 then
begin
image1.canvas.TextOut(10,10, 'mam');

end;
if Pos(edit1.text, riadok)=0 then
begin
image1.canvas.textout(10,50, 'nemam');
end;
if a= 'Edit1' then
begin
image1.canvas.textout(10,10, 'napiste nazov kalendara');
end;
end;
CloseFile(subor);
end;

takto to cele vyzera, berie mi to do uvahy aj cele slovo, no napriek tomu, ked zadam nieco, co v subore mam, vypise mi mam aj nemam (preto som dal pre vypis nemam y=50) a ked dam nieco, co v subore nie je, vtedy mi vypise len nemam. Ako to fixnut ?
dykeer
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 102
Registrovaný: 02 jan 2011, 21:21
Kontaktovať používateľa:

Re: Problém s Lazarusom

Príspevok od používateľa dykeer »

No problem je v tom, ze neobsluhujes premenu lNasiel, ktora ti zastavi cyklus vyhladavania v momente, ked najde. Upravil som ti to:

Kód: Vybrať všetko

procedure TForm1.Button1Click(Sender: TObject);
var
subor: TextFile;
riadok, a: string;
nasiel: Boolean;

begin

image1.canvas.fillrect(image1.clientrect);
AssignFile(subor, 'kalendare.txt');
Reset(subor);
nasiel:= false;
a:= edit1.text;

begin

while (EOF(subor)=false) and (nasiel=false) do
begin
Readln(subor, riadok);
if Pos(Edit1.text, riadok)<>0 then lNasiel:=true;
end; //tu konci cyklus

If lNasiel=true then 
image1.canvas.textout(10,50, 'mam')
else
image1.canvas.textout(10,50, 'nemam');

if a= 'Edit1' then
begin
image1.canvas.textout(10,10, 'napiste nazov kalendara');
end;

CloseFile(subor);
end; 
Liho
Novice
Novice
Príspevky: 4
Registrovaný: 07 dec 2011, 17:05

Re: Problém s Lazarusom

Príspevok od používateľa Liho »

PARADA! Uz mi to funguje podla mojich predstav, Dakujem ! (Sice sa INF lazarus venujem v skole 2 roky a idem z toho maturovat, o funkcii Pos som ešte asi nepočul :) ) Takže díki za radu !
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Problém s Lazarusom

Príspevok od používateľa audiotrack »

nevedieť po dvoch rokoch pracovať s textom, a dokonca ani to že neprogramuješ v lazaruse ale v delphi (lazarus je iba prostredie) je smiešna vizitka slovenského školstva
Liho
Novice
Novice
Príspevky: 4
Registrovaný: 07 dec 2011, 17:05

Re: Problém s Lazarusom

Príspevok od používateľa Liho »

audiotrack napísal:nevedieť po dvoch rokoch pracovať s textom, a dokonca ani to že neprogramuješ v lazaruse ale v delphi (lazarus je iba prostredie) je smiešna vizitka slovenského školstva

žiaľ bohu to viem a preto sa tomu venujem aj vo voľnom čase aj keď si stým niekedy neviem dať rady. Ale tak tým sa človek učí, že to skúša :)

//autoeditácia príspevku (11 Dec 2011, 19:54)
A nakoniec ma najviac mrzí, že moj program nebere do úvahy diakritiku, stým sa ale už nedá nič robiť, že ?

//autoeditácia príspevku (11 Dec 2011, 20:14)
beriem späť, zmenil som kódovanie znakov a bez problémov aj diakritika :D
Napísať odpoveď