12
Stringovi i Datoteke SADRŽAJ: String tip podataka............................................... 2 String procedure i funkcije.....................................3 Pretraga stringova.............................................3 Ubacivanje teksta..............................................3 Brisanje dela stringa..........................................4 Konvertovanje stringova........................................5 Rad sa datotekama................................................. 6 Rad sa tekstualnim datotekama...................................6 Čitanje iz datoteke............................................6 Rad sa celim datotekama........................................8 Pisanje u datoteku.............................................9

Stringovi_Datoteke

Embed Size (px)

DESCRIPTION

k

Citation preview

Page 1: Stringovi_Datoteke

Stringovi i Datoteke

SADRŽAJ:

String tip podataka.................................................................................................................................2String procedure i funkcije.................................................................................................................3

Pretraga stringova..........................................................................................................................3Ubacivanje teksta...........................................................................................................................3Brisanje dela stringa.......................................................................................................................4Konvertovanje stringova................................................................................................................5

Rad sa datotekama.................................................................................................................................6Rad sa tekstualnim datotekama..........................................................................................................6

Čitanje iz datoteke..........................................................................................................................6Rad sa celim datotekama...............................................................................................................8Pisanje u datoteku..........................................................................................................................9

Page 2: Stringovi_Datoteke

String tip podataka

String tipovi podatak su jedan od najprimenjenijih tipova u programiranju. Svaka alpikacija sigurno radi sa string tipovima podataka. Kao string tip podataka može se koristiti jedan od više vrsta različitih varijanti string podataka, ili niz karaktera. U Delphi-ju je npr. dozvoljeno deklarisati string kao niz karaktera:

var tekst : array[1..100] of char;begin tekst := ‘Ja volim Delphi’;end.

Jedna mana ovakve deklaracije string tipa podataka je što statički definisani nizovi automatski zauzimaju memoriju saglasno broju članova niza (u ovom slučaju 100 * 1 Byte = 100 Byte), bez obzira da li su definisani svi elementi ili ne.U sledećoj tabeli je dat pregled karakter i string tipova:

Tip podatka DefinicijaChar Jedan karakter od 256 mogućih (1 Byte). Po Ansi kodnom rasporedu.WideChar Jedan karakter 65536 mogućih (2 Byte). Po Unicode standardu.AnsiChar Jedan karakter od 256 mogućih. Po Ansi kodnom rasporedu.ShortString Maksimalno 255 Char karaktera. Prvi je rezervisan za dužinu string-a.String Sadrži skoro neograničen broj Char tip podataka (2 GB).AnsiString Sadrži neograničen broj AnsiChar tipova podataka (2 GB).WideString Sadrži neograničen broj WideChar tipova podataka.

ShortString je fiksan 255 dug niz karaktera i statički je lociran. ShortString tip uvek zauzima 256 Bajta memorije (1 karakter = 1 Byte), bez obzira na dužinu unetih podataka.

AnsiString je tip podatka koji može da sadrži neograničen broj AnsiChar tipova podataka i dinamički se locira. Memorija koju zauzima zavisi od toga koliki je podatak i AnsiString-u. Po osnovnom podešavanju u Delphi-ju, kada se definiše promenljiva tipa String, u stvari se definiše AnsiString.

Dobra osobina dinamičkih String tipova podataka jeste da kada se želi vrednost jedne string promenljive dodeliti drugoj, onda se samo vrši referenciranje druge promenljive ka memorijskoj lokaciji gde se nalazi vrednost prve promenljive.

var prva, druga: string;

begin prva := 1; // Dodeljivanje vrednosti prvoj string promenljivoj druga := prva; // Referenciranje memorijske lokacije end.

Page 3: Stringovi_Datoteke

Ako postoji potreba da se definišu stringovi manje dužine od 255 karaktera onda se mogu koristiti podtipovi ShortString tipa podataka. Na primer: var s : string[50];.Rad sa String tipovima podataka

String procedure i funkcije

Nad string tipom podataka mogu se primeniti mnoge funkcije i procedure, ali postoje neke koje se češće upotrebljavaju od drugih. Ovde će biti dat pregled nekih osnovnih funkcija.

Pretraga stringova

Ako je potrebno videti da li neki string sadrži određeni niz karaktera može se koristiti funkcija Pos.Pos funkcija vraća 0, ako se određeni podsting ne nalazi u drugom.

program Project1;

{$APPTYPE CONSOLE}uses SysUtils;

var s: string;begin Write('Unesite nekti tekst: '); ReadLn(s);

if Pos(' ', s) = 0 then WriteLn('Uneli ste tekst') else WriteLn('Niste nista uneli');

ReadLn;end.

Ubacivanje teksta

U string je moguće ubaciti neki tekst, ako je potrebno. Da bi se neki tekst ubacio u string potrebno je pozvati proceduru Insert, koja kao ulazne parametre prihvata: string koji treba ubaciti, string u koji se ubacuje i zadnji parametar je indeks, odnosno pozicija na kojoj se ubacuje novi string.Primer

program Project1;

{$APPTYPE CONSOLE}

uses

Page 4: Stringovi_Datoteke

SysUtils;

var Voce: string; i: Integer;

begin Voce := 'Jabuke,Kruske,Banane,Jagode,Maline';

i := 0; repeat Inc(i); if Voce[i] = ',' then begin Insert(' ', Voce, i + 1); Inc(i); end; until i = Length(Voce);

WriteLn(Voce); ReadLn;end.

U primeru se iza svakog zareza dodaje prazan prostor. U ovom primeru primena for petlje je nemoguća jer se string dinamički menja, a kod for petlje čitanje dužine stringa ide u prvoj iteraciji.

Brisanje dela stringa

Za brisanje dela stringa moguće je koristiti proceduru Delete koja kao parametre prima: string podatak koji se menja, indeks odakle treba da krene brisanje i broj karaktera koje treba obrisati.Primer

program Project1;

{$APPTYPE CONSOLE}

uses SysUtils;

var ime: string; p : integer;

beginWriteLn(‘Unesite ime’); ReadLn(ime); p := Pos(‘r’,ime); if p <> 0 then

Page 5: Stringovi_Datoteke

Delete(ime, p, 1);

WriteLn(ime); ReadLn;end.

Konvertovanje stringova

Funkcije koje se često koriste u Delphi-ju su funkcije koje vrše konvertovanje iz jednog tipa podataka u drugi. Funkcija koja vrši konvertovanje iz Integer tipa podataka u String tip podataka je funkcija IntToStr, a obrnuto StrToInt. Ove funkcije dolaze iz modula SysUtils i vrlo su brze.Primer

program Project1;

{$APPTYPE CONSOLE}

uses SysUtils;

var broj: string; tekst : Integer;

begin WriteLn(‘Unesite broj’); ReadLn(broj); tekst := StrToInt(broj); ReadLnend.

U primeru ako je broj = '25', onda je ceo broj jednak 25.Umesto da se koriste ove dve funkcije mogu se koristiti i funkcije Str i Val koje dolaze iz modula System. Str funkcija konvertuje Integer u String, a Val konvertuje String u Integer.Funkcija Val je interesantna jer prihvata tri parametara: string koji se konvertuje, Integer promenljivu u koju se konvertuje, i broj greške. Parametar koji prikazuje broj greške je u stvari indeks karaktera koji se ne može konvertovati.

var tekst: string; broj: Integer; greska: Integer;

begin tekst := '-4s5'; Val(tekst, broj, greska);

if greska <> 0 then

Page 6: Stringovi_Datoteke

begin WriteLn('Ne moze se konvertovati ', tekst,’ u broj, jer je karakter na ‘,greska,’ poziciji nepravilan.’); ReadLn; end;end.

Rad sa datotekama

Rad sa tekstualnim datotekama

Tekstualne datoteke su najednostavnije za obradu, ne samo u Delphi-ju, već i u drugim programskim jezicima. Tekstualne datoteke se sastoje od određenog broja karaktera, koji su definisani po Ansi ili Unicode kodnom rasporedu. Ekstenzija tekstualnih datoteka je .txt. Da bi u Delphi-ju pristupili nekoj tekstualnoj datoteci, potrebno je prvo definisati Text promenljivu koja će da predstavlja tekstualnu datoteku.

varDatoteka : Text;

Dodeljivanje vrednosti Text promenljivoj se vrši preko procedure AssignFile koja dodeljuje promenljivoj datoteku, koja se nalazi na određenoj putanji.

varDatoteka : Text;

begin

AssignFile(Datoteka, ‘d:\kurs_delphi\primer.txt’);end.

Kada se promenljivoj dodeli datoteka, onda se sa tom datotekom mogu raditi različite operacije: čitanje, pisanje, dodavanje.

Čitanje iz datoteke

Za čitanje podataka iz datoteke potrebno je pozvati Reset proceduru. Ova procedura omogućava čitanje iz datoteke, ali može se javiti I/O greška ako datoteka ne postoji. Kada se iskoristi Reset procedura za čitanje iz datoteke može se koristiti ReadLn procedura.

Primer:

program Project1;

Page 7: Stringovi_Datoteke

{$APPTYPE CONSOLE}

uses SysUtils;

var Datoteka: Text; LinijaTeksta: string;

begin AssignFile(Datoteka, ‘d:\kurs_delphi\primer.txt’); Reset(Datoteka);

ReadLn(Datoteka, LinijaTeksta); WriteLn(LinijaTeksta);

CloseFile(Datoteka); ReadLn;end.

Ovaj kod će raditi pravilno sve dok datoteka postoji, a da bi bili sigurni da datoteka postoji treba uhvatiti povratnu vrednost funkcije IOResult. Ova funkcija služi za proveru da li se neka od procedura ili funkcija za rad sa datotekama uspešno izvršila. Ako ova funkcija vrati 0 , onda je sve u redu, a ako vrati broj različit od nule, onda se desila greška.

Da bi se uspešno uhvatila greška I/O tipa, prvo treba isključiti automatsku proveru I/O grešaka. To se može uraditi davanjem direktive kompajleru:

{$I-}I/O poziv procedure{$I+}

Postupak je da se prvo onemogući automatska provera, izvrši procedura ili funkcija, pa zatim odmah omogući automatska provera.

program Project1;

{$APPTYPE CONSOLE}

uses SysUtils;var Datoteka: Text; LinijaTeksta: string; ImeDatoteke: string;

begin ImeDatoteke := 'd:\kurs_delphi\primer.txt'; AssignFile(Datoteka, ImeDatoteke); {$I-}

Page 8: Stringovi_Datoteke

Reset(Datoteka); {$I+} if IOResult = 0 then begin ReadLn(Datoteka, LinijaTeksta); WriteLn(LinijaTeksta);

CloseFile(Datoteka); end else WriteLn('Ne mogu da otvorim datoteku: ', ImeDatoteke); ReadLn;end.

Rad sa celim datotekama

Kada je potrebno učitati sadržaj cele datoteke, to se može uraditi korišćenjem funkcije Eof, koja vraća boolean vrednost tačno, kada nema više karaktera za čitanje u datoteci (stigli smo do kraja datoteke).Obično se čitanje datoteke vrši preko while petlje, kod koje se postavlja uslov da je povratna vrednost funkcije Eof tačno.Primer:

program Project1;

{$APPTYPE CONSOLE}

uses SysUtils;var Datoteka: Text; LinijaTeksta: string; ImeDatoteke: string;

begin ImeDatoteke := 'd:\kurs_delphi\primer.txt'; AssignFile(Datoteka, ImeDatoteke); {$I-} Reset(Datoteka); {$I+} if IOResult = 0 then begin

while not Eof(Datoteka) do begin

ReadLn(Datoteka, LinijaTeksta); WriteLn(LinijaTeksta); end; CloseFile(Datoteka); end else WriteLn('Ne mogu da otvorim datoteku: ', ImeDatoteke);

Page 9: Stringovi_Datoteke

ReadLn;end.

Pisanje u datoteku

Zapisivanje teksta u datoteku se može vršiti procedurom Rewrite, koja uvek kreira novu datoteku u kojoj se piše neki tekst. Ako datoteka u koju se piše postoji na disku, onda procedura briše postojeću datoteku i kreira novu. Ako ne postoji, kreira se nova datoteka. Kada se datoteka spremi za pisanje može se koristiti varijanta procedure WriteLn za pisanje u datoteku.

Primerprogram Project1;

{$APPTYPE CONSOLE}

uses SysUtils;var Datoteka: Text; LinijaTeksta: string; ImeDatoteke: string;

begin ImeDatoteke := 'd:\kurs_delphi\primer.txt'; LinijaTeksta :=’Moj prvi tekst’; AssignFile(Datoteka, ImeDatoteke); {$I-} Rewrite(Datoteka); {$I+} if IOResult = 0 then begin WriteLn(Datoteka,LinijaTeksta); CloseFile(Datoteka); end else WriteLn('Ne mogu da otvorim datoteku: ', ImeDatoteke); ReadLn;end.