Upload
borislav-subasic
View
3
Download
2
Embed Size (px)
DESCRIPTION
k
Citation preview
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
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.
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
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
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
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;
{$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-}
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);
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.