Tvorba souboru bez udani typu – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Tvorba souboru bez udani typu – Pascal – Fórum – Programujte.comTvorba souboru bez udani typu – Pascal – Fórum – Programujte.com

 

Danielle
~ Anonymní uživatel
24 příspěvků
29. 1. 2014   #1
-
0
-

Prosim radu jak vytvorit soubor bez udani k nasledujicimu prikladu. Diky

Předpokládejte, že existuje soubor bez udani typu se zaznamy o fotbalovych utkanich. Zaznam o utkani zacina dvema trojznakovymi retezci představující kod zeme, pak dve jednobytova cela cisla predstavujici skore, za nimi pak pokracuji zaznamy o vstrelenych brankach: napred domaci, pak hoste. Zaznam o brance obsahuje minutu zapasu, kdy byla branka vstrelena, za ni pak prijmeni strelce ulozene na minimalnim prostoru. Prectete tento soubor a vypiste tabulku zucastnenych zemi s celkovym skore - poctem vstrelenych a obdrzenych branek.

Nahlásit jako SPAM
IP: 78.156.128.–
z
~ Anonymní uživatel
268 příspěvků
29. 1. 2014   #2
-
0
-

Stejně jako předtím. S netypovými soubory už jsi pracoval.

var f: file; blockread...
 

Nahlásit jako SPAM
IP: 88.101.8.–
JoDiK
~ Anonymní uživatel
987 příspěvků
29. 1. 2014   #3
-
0
-

#1 Danielle
V zadání je řečeno, že soubor existuje a že ho máte číst. Opravdu ho chceš vytvářet?

Jinak vytváření je jen opak čtení, takže jestli už máš čtení hotové, tak to zkopíruj a místo reset dej rewrite, místo blockread dej blockwrite a je to...

Nahlásit jako SPAM
IP: 88.103.233.–
Danielle
~ Anonymní uživatel
24 příspěvků
29. 1. 2014   #4
-
0
-

Ja vim jak se zapisuje a cte vim co dela reset a rewrite ale nevim jak zapisu takhle rozsahle informace soubor jsem si chtela vytvorit protoze si to pak muzu na necem otestovat nejsem schopna napsat okamzite priklad ktery data pouze precte... 

Nahlásit jako SPAM
IP: 78.156.128.–
JoDiK
~ Anonymní uživatel
987 příspěvků
29. 1. 2014   #5
-
0
-

#4 Danielle
Zapíšeš je přece příkazem blockwrite, kde 1 blok jsou ty informace uložené ve vhodné proměnné. Pokud je problém tady, tzn neumíš definovat proměnnou s požadovanými informacemi, tak se podívej na typ záznam (record). Nezapomeň při vytváření souboru (a potom i u otvírání pro čtení) definovat správně velikost 1 bloku v bajtech, kterou si pro typ záznam zjistíš funkcí sizeof.

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
987 příspěvků
29. 1. 2014   #6
-
0
-

#5 JoDiK
aha, beru zpět, nedočetl jsem to zadání až do konce...

Není tam pravidelná struktura, takže se to bude muset číst po jednotlivých bajtech a dekódovat až v paměti...

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
987 příspěvků
29. 1. 2014   #7
-
0
-

#6 JoDiK
tak ještě jednou, když si přečteš popis údajů, tak máš vlastně návod, jaké struktury zapisovat (číst). Takže budeš postupně zapisovat pomocí příkazů blockwrite jednotlivé údaje po bajtech.

var

  kodzeme1,kodzeme2:string[3];

  skore:array[1..2] of byte;

blockwrite(soubor,kodzeme1,sizeof(kodzeme1),zapsano);

blockwrite(soubor,kodzeme2,sizeof(kodzeme2),zapsano);

blockwrite(soubor,skore,sizeof(skore),zapsano);

atd...

tohle je pěkně nechutné:

prijmeni strelce ulozene na minimalnim prostoru

ale šlo by to třeba takto:

var

  strelec:string;

blockwrite(soubor,strelec,length(strelec)+1,zapsano);

a pak až se to bude číst, tak načíst nejdřív délku toho jména zvlášť a pak dočíst zbytek toho jména...

A dost, nebudu všechno dělat za tebe :-)

Nahlásit jako SPAM
IP: 88.103.233.–
Danielle
~ Anonymní uživatel
24 příspěvků
29. 1. 2014   #8
-
0
-

U toho blockwrite nemusi byt 4 parametr ne ?

Nahlásit jako SPAM
IP: 78.156.128.–
JoDiK
~ Anonymní uživatel
987 příspěvků
30. 1. 2014   #9
-
0
-

#8 Danielle
Nemusí.

Nahlásit jako SPAM
IP: 88.103.236.–
Danielle
~ Anonymní uživatel
24 příspěvků
30. 1. 2014   #10
-
0
-

   

type
  zaznam = record
      minuta: byte;
      prijmeni: string;
    end;
var
  f: file;
  branky: zaznam;
  kodzeme1, kodzeme2: string[3];
  skore : array[1..2] of byte;
  i: byte;
begin
Assign(f, 'zapasy');
Rewrite(f,1);
for i:=1 to 5 do begin
writeln('Zadat kod 1. zeme: ');
Readln(kodzeme1);
Blockwrite(f, kodzeme1, sizeof(kodzeme1));
writeln('Zadat kod 2. zeme: ');
Readln(kodzeme2);
Blockwrite(f, kodzeme2, sizeof(kodzeme2));
writeln('Pocet golu (domaci) 1. tym: ');
Readln(skore[1]);
writeln('Pocet golu (hoste) 2. tym: ');
Readln(skore[2]);
Blockwrite(f, skore, sizeof(skore));
writeln('Zadej minutu: ');
Readln(branky.minuta);
Blockwrite(f, branky.minuta, sizeof(branky.minuta));
writeln('Zadej prijmeni domaci: ');
Readln(branky.prijmeni);
Blockwrite(f, branky.prijmeni, length(branky.prijmeni)+1);
writeln('Zadej minut: ');
Readln(branky.minuta);
Blockwrite(f, branky.minuta, sizeof(branky.minuta));
writeln('Zadej prijmeni domaci: ');
Readln(branky.prijmeni);
Blockwrite(f, branky.prijmeni, length(branky.prijmeni)+1);
writeln('Zadej minutu: ');
readln(branky.minuta);
Blockwrite(f, branky.minuta, sizeof(branky.minuta));
writeln('Zadej prijmeni hoste: ');
readln(branky.prijmeni);
Blockwrite(f, branky.prijmeni, length(branky.prijmeni)+1);
end;
Close(f);
end.

Muze ten zapis do souboru vypadat takto ? 

Nahlásit jako SPAM
IP: 78.156.128.–
JoDiK
~ Anonymní uživatel
987 příspěvků
30. 1. 2014   #11
-
0
-

#10 Danielle
coby nemohl, jen se mi trochu nezdají ty branky, neměl by jejich počet odpovídat skore[1]+skore[2] ?

Vtom tvém zápisu se trochu ztrácím, zdá se mi že tam máš jen 2x domácí a 1x hosté, to jako jiné skóre než 2:1 nebude? Jestli to bylo myšleno jako testovací sada, tak potom nenačítej skore a rovnou tam piš 2 a 1.


Nahlásit jako SPAM
IP: 88.103.233.–
Danielle
~ Anonymní uživatel
24 příspěvků
30. 1. 2014   #12
-
0
-

pouze testovaci sada nechtela jsem to komplikovat jsem myslela na prvnim indexy bytovy cislo na druhym indexu bytovy cislo ne ? 

Nahlásit jako SPAM
IP: 78.156.128.–
Danielle
~ Anonymní uživatel
24 příspěvků
30. 1. 2014   #13
-
0
-

Jodik jak bys slovne provedl ten vypis vsech ucastnenych zemi s jejich bilancnim skore ? Asi se to musi cist po bytu ale jak ty hodnoty projdu a zobrazim vysledek?

var f: file;
               

begin
Assign(f, 'zapasy');
Reset(f, 1);
while not eof(f) do begin
BlockRead(f, byte hodnota, ???); 
            

end;
end.
Nahlásit jako SPAM
IP: 78.156.128.–
Danielle
~ Anonymní uživatel
24 příspěvků
30. 1. 2014   #14
-
0
-

A jeste aby to cteni nebylo zavisle na skore 2:1 

Nahlásit jako SPAM
IP: 78.156.128.–
JoDiK
~ Anonymní uživatel
987 příspěvků
30. 1. 2014   #15
-
0
-

#14 Danielle
Nee, přece číst to budeš úplně stejně, jako jsi to zapisovala!

Zápis:
Blockwrite(f, kodzeme1, sizeof(kodzeme1));

Čtení:

Blockread(f, kodzeme1, sizeof(kodzeme1));

 

Nahlásit jako SPAM
IP: 88.103.233.–
JoDiK
~ Anonymní uživatel
987 příspěvků
30. 1. 2014   #16
-
0
-

#15 JoDiK
Jenom u těch jmen střelců přečteš zvlášť jako jeden byte délku řetězce a pak dočteš ten zbytek vtom zjištěném počtu.

Na to by se ti moc hodila deklarace absolutním odkazem, tak si to nastuduj.

Třeba zde: http://spsemoh.cz/…/memport.htm#…

Nahlásit jako SPAM
IP: 88.103.233.–
Danielle
~ Anonymní uživatel
24 příspěvků
31. 1. 2014   #17
-
0
-

Cteni chapu

Jak by si ukladal ty zeme a jejich skore  kdyz predem nevim kolik jich bude ? Prosim o radu

Nahlásit jako SPAM
IP: 78.156.128.–
JoDiK
~ Anonymní uživatel
987 příspěvků
31. 1. 2014   #18
-
0
-

Tomu dotazu nerozumím, buď jsem zadání nepochopil já nebo ty.

Ty přece nemáš nic ukládat, soubor podle zadání "existuje" - ty si ukládáš jen pokusný soubor abys to měla na čem testovat... Nebo-li kdo vytváří soubor tak snad musí vědět kolik je těch zemí...

A jestli ses jen špatně vyjádřila a chtěla ses zeptat jak číst ty země když nevíš kolik jich bude, tak přece až dočteš posledního střelce tak zkusíš číst další zápas a když se přečetlo 0 položek, už v souboru nic není... Jinými slovy čteš tak dlouho, dokud je co...

Nahlásit jako SPAM
IP: 88.103.233.–
Danielle
~ Anonymní uživatel
24 příspěvků
31. 1. 2014   #19
-
0
-

to ano ale jak mam udelat neco ve stylu. Vim ze ctu do doby dokdy je co 

USA 8:1

CZE 1:4

GER 0:4

Nahlásit jako SPAM
IP: 78.156.128.–
JoDiK
~ Anonymní uživatel
987 příspěvků
31. 1. 2014   #20
-
0
-

#19 Danielle
prosímtě, pokud pořád nerozumíš zadání, tak si to přečti ještě pětkrát...

v souboru by to přece podle zadání mělo vypadat nějak takto:

USA GER 4:1 čas jméno čas jméno čas jméno čas jméno čas jméno

CZE GER 1:2 čas jméno čas jméno čas jméno

a číst to můžeš třeba nějak takto...

repeat

  blockread(f,kodzeme1, sizeof(kodzeme1), precteno);

  if precteno=sizeof(kodzeme1) then

  begin

    blockread(f,kodzeme2, sizeof(kodzeme2));

    a další čtení všeho ostatního včetně skore[1]+skore[2] časů a jmen

     zpracování jednoho zápasu

  end;

until precteno<sizeof(kodzeme1);
 

Nahlásit jako SPAM
IP: 88.103.233.–
Danielle
~ Anonymní uživatel
24 příspěvků
31. 1. 2014   #21
-
0
-

Ja chapu zadani jen nevim jak mam provest to zobrazeni

USA 81

CZE 18

Nahlásit jako SPAM
IP: 78.156.128.–
Danielle
~ Anonymní uživatel
24 příspěvků
1. 2. 2014   #22
-
0
-

a pripad USA jednou domaci potom hostujici

USACZE21casstrelec.......

GERUSA21casstrelec.....

Nahlásit jako SPAM
IP: 78.156.128.–
JoDiK
~ Anonymní uživatel
987 příspěvků
1. 2. 2014   #23
-
0
-

#22 Danielle
Já jsem to zadání pochopil tak, jak jsem psal, tys ho pochopila úplně jinak.

Tak nezbývá než požádat zadavatele, ať ti to vysvětlí nejlépe na příkladu, takhle se dál nedostaneš...

Nahlásit jako SPAM
IP: 88.103.233.–
Danielle
~ Anonymní uživatel
24 příspěvků
1. 2. 2014   #24
-
0
-

Prectete tento soubor a vypiste tabulku zucastnenych zemi s celkovym skore - poctem vstrelenych a obdrzenych branek. ????

S celkovym skore

Nahlásit jako SPAM
IP: 78.156.128.–
Danielle
~ Anonymní uživatel
24 příspěvků
1. 2. 2014   #25
-
0
-

 dukaz toho ze vim ktera bije ... ale nevim jak bych udelala to celkovy skore

type zaznam = record
                minuta: byte;
                strelec: string;
              end;

var f: file;
    kodzeme: string[3];
    skore : array[1..2] of byte;
    branka: zaznam;
    domaci: byte;
    hoste: byte;
    i: byte;

begin
Assign(f, 'zapasy');
Reset(f, 1);
while not eof(f) do begin
BlockRead(f, kodzeme, sizeof(kodzeme));
write(kodzeme);
BlockRead(f, kodzeme, sizeof(kodzeme));
write(kodzeme);
Blockread(f, skore[1], sizeof(skore[1]));
domaci:=skore[1];
write(skore[1]);
Blockread(f,skore[2], sizeof(skore[2]));
hoste:=skore[2];
write(skore[2]);
for i:=1 to domaci do begin
  Blockread(f, branka.minuta, sizeof(branka.minuta));
  write(branka.minuta);
  Blockread(f, branka.strelec[0], 1);
  Blockread(f, branka.strelec[1], length(branka.strelec));
  write(branka.strelec);
end;
for i:=1 to hoste do begin
  Blockread(f, branka.minuta, sizeof(branka.minuta));
  write(branka.minuta);
  Blockread(f,branka.strelec[0],1);
  Blockread(f,branka.strelec[1], length(branka.strelec));
  write(branka.strelec);
end;
writeln;
end;
end.
Nahlásit jako SPAM
IP: 78.156.128.–
JoDiK
~ Anonymní uživatel
987 příspěvků
1. 2. 2014   #26
-
0
-

#25 Danielle
Nojo, trochu jsme si nerozuměli, ty o voze, já o koze a hlavně jsem si nedočetl to zadání do konce.

Celkové skóre jednotlivých zemí?

No tak když nevíš kolik jich bude, tak buď deklaruj pole s dostatečnou rezervou (zemí zas tak moc není :-), nebo použij dynamické proměnné (orientovaný seznam).

Nahlásit jako SPAM
IP: 88.103.233.–
Mircosoft+1
Věrný člen
16. 2. 2014   #27
-
0
-

Jestli to chápu správně, tak ten podrobný seznam střel vůbec nepotřebuješ, jde jenom o skore. Takže asi tak:

- Načti zem 1.

- Načti zem 2.

- Načti skóre 1.

- Načti skóre 2.

- Prohledej seznam zemí. Jestli v něm zem 1 není, vlož ji tam.

- K daným gólům u země 1 přičti skóre 1, k obdrženým skóre 2.

- Totéž se zemí 2, jenom skóre přičítej obráceně.

- for i:=1 to skóre 1 + skóre 2 do:

-- Přeskoč minutu.

-- Načti délku jména.

-- Přeskoč jméno.

- Zpátky na začátek a opakuj to celé tak dlouho, dokud je co číst.

- Vypiš na obrazovku země a čísla ze seznamu.

Nahlásit jako SPAM
IP: 37.48.40.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
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, 3 hosté

Podobná vlákna

Cteni ze souboru bez udani typu — založil Danielle

Soubor bez udani typu — založil Danielle

Změna typu souboru ... — založil koudiss

Kontrola typů souborů — založil pidgin

Moderátoři diskuze

 

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