Pascal - načítanie zo súboru

Programovacie jazyky, rady, poradňa...
Iron-Eddie
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 746
Registrovaný: 31 aug 2008, 10:07
Bydlisko: R'lyeh

Pascal - načítanie zo súboru

Príspevok od používateľa Iron-Eddie »

Pozn. na úvod - nie je to domáca úloha :) (našťastie)

Potreboval by som poradiť ohľadom jednej veci, čo sa týka načítavania zo súboru. Konkrétne - ako načítať nejakú konkretnú hodnotu zo súboru do programu. Vysvetlím, čo si predstavujem:
Mám napríklad textový súbor, kde mám názvy štátov a vedľa hlavné mesto. A chcem zostaviť program, ktorý mi potom, čo mu zadám názov krajiny napíše hlavné mesto.

Toto by som zvládol

Kód: Vybrať všetko

program hlavnemesto;
        uses crt;
        var f:text; {tuto si nie som istý, či mám dať tento typ premennej}
            stat,mesto:string;
begin
     clrscr;
     assign(f,'mesto.txt');
     writeln('Zadaj nazov statu');
     readln(stat);
     reset(f);
Tu na chvíľu skončím - presne tu totiž strácam niť. V súbore "mesto.txt" mám mnoho údajov, a potrebujem len jeden, konkrétne chcem nájsť názov zadaného štátu (v premennej "stat") v súbori a vedľa napísané hlavné mesto načítať do premennej "mesto". Zvyšok by som už vedel aj sám dotvoriť.
Viem načítať len jednoduchý text a s tým manipulovať (cez príkaz readln(f,premenna) ).

Keď už by som tam mal základ načítaný, vytvoriť zvyšok programu (výpis "Hlavné mesto je ..." a ukončenie) by som už vedel.
Ďakujem, a budem rád, ak konkrétne neznáme kroky budú aj s vysvetlením. :smt006

Ešte raz, čo potrebujem:
1. aby v súbore "mesto.txt" našiel mnou zadaný štát (načítaný do premennej "stat")
2. aby vedľa stojace hlavné mesto načítal do premennej "mesto".
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Pascal - načítanie zo súboru

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

pomocou funkcie pos nájdeš či daný riadok obsahuje ten reťazec (štátu). Ak nie, pokračuješ na ďalší riadok, ak áno tak si z neho pomocou substr si vytiahneš mesto
Iron-Eddie
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 746
Registrovaný: 31 aug 2008, 10:07
Bydlisko: R'lyeh

Re: Pascal - načítanie zo súboru

Príspevok od používateľa Iron-Eddie »

Z tohto som veľa nepochopil. :nono:
Pos viem použiť len v bezprílohovom programe (bez ext. súboru), ale tam by možno nebol problém.

Ujo G. mi tiež nepomohol, hoci som sa tam tiež snažil niečo nájsť. Bez výsledku.
Ako mu poviem, že ide nový riadok, a ako sa používa to substr? Ďakujem.

Mohol by si to vysvetliť na nejakom konkrétnom príklade? (Nemusí ísť o ten, čo som dal ja).
paralen
Light Star
Light Star
Príspevky: 267
Registrovaný: 02 máj 2006, 15:15

Re: Pascal - načítanie zo súboru

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

Kód: Vybrať všetko

while not EOF(f) do
     begin
     //nacitaj riadok
     readln(f, riadok);    
     if Pos(stat, riadok)>0 then
          begin
          // tu sa to da viacerimi sposobmi, napr. overovani konca riadku atd...
          mesto:= Copy(stat, Length(stat), Length(riadok)- Length(stat)-1);
          end;
     end;
    
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: Pascal - načítanie zo súboru

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

Zdrojovy subor ma format: prvy riadok nazov statu, druhy jeho hlavne mesto, treti riadok nazov statu, stvrty jeho hlavne mesto atd..., doplnit vlastnu cestu k zdrojovemu suboru (alebo len jeho nazov, ak je spolu s exe ;-)).

Kód: Vybrať všetko

program HL_MESTA;
uses Crt;
var
  f: text;
  stat,mesto,data: string;

BEGIN
  ClrScr;
  Assign (f,'cesta k zdrojovemu suboru');
  Write ('Zadaj stat: ');
  ReadLn (data);
  Reset (f);
  While (not Eof (f)) and (data<>stat) do begin
    ReadLn (f,stat);
    ReadLn (f,mesto);
    if data=stat then WriteLn (stat,': ',mesto);
  end;
  Readln;

END.
Sagittarius
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2883
Registrovaný: 13 feb 2007, 21:58
Bydlisko: Do nekonečna a ešte ďalej

Re: Pascal - načítanie zo súboru

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

Len potom pozor pri vytváraní textového súboru, aby tam nebola medzera za názvom štátu. :)
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: Pascal - načítanie zo súboru

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

Medzera by nevadila, nakolko to cita predsa po riadkoch. No prazdny riadok (ENTER) by uz problemy narobil urcite. Ale ja som tu neriesil osetrenie vsetkych moznyych situacii. Na to je tu uz zakladatel temy
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Pascal - načítanie zo súboru

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

Gregi napísal:Medzera by nevadila, nakolko to cita predsa po riadkoch. No prazdny riadok (ENTER) by uz problemy narobil urcite. Ale ja som tu neriesil osetrenie vsetkych moznyych situacii. Na to je tu uz zakladatel temy
medzera by vadila keďže si tú podmienku položil takto: While (not Eof (f)) and (data<>stat)
Keby tam dáš nejaké pos (a či teda ten riadok začína tým štátom) tak súhlasím že medzera nevadí
Gregi
Light Star
Light Star
Príspevky: 224
Registrovaný: 24 mar 2005, 11:34

Re: Pascal - načítanie zo súboru

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

zdrojovy subor ma oddelovac ":" a za nim nasleduje nazov hlavneho mesta. Cesta k suboru samozrejme podla gusta.

Kód: Vybrať všetko

Program HL_MESTA;
uses Crt;
var
  f: text;
  sstat,stat,mesto,data: string;
  x,pos,dlzka: Integer;
  nasiel,nasiel1: Boolean;

BEGIN
  ClrScr;
  Assign (f,'cesta k suboru');
  Write ('Zadaj nazov statu: ');
  ReadLn (data);
  Reset (f);
  While not ((Eof (f)) or (nasiel1=true)) do begin
    ReadLn (f,stat);
    dlzka:=length (stat);
    pos:=1;
    sstat:='';
    nasiel:=false;
    While ((pos<dlzka) and (nasiel=false)) do
      if stat[pos]=':' then begin
        nasiel:=true;
        for x:=1 to pos-1 do sstat:=sstat+stat[x];
        if sstat=data then begin
          nasiel1:=true;
          for x:=pos+2 to dlzka do mesto:=mesto+stat[x];
          WriteLn ('Hlavne mesto ',sstat,': ',mesto);
        end;
      end
      else inc(pos);
  end;
  if nasiel1=false then WriteLn ('Nenasiel som...');
  Close (f);
  ReadLn;

END.
Prílohy
mesta.rar
zdrojovy subor miest
(2.95 KiB) 35 stiahnutí
Napísať odpoveď