Podela stringa

Podela stringa

offline
  • Pridružio: 05 Maj 2005
  • Poruke: 84
  • Gde živiš: Cirikovac

Imam string proizvoljne duzine u kome je upisano nesto poput "0;111;222;333".Znaci,kod treba da ukloni ";" i da u TextBox kontroli ili promenjivoj upise samo 0 111 222 333.Hvala.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 04 Sep 2003
  • Poruke: 24135
  • Gde živiš: Wien

nova_varijabla := StringReplace(stara_varijabla, ';', ' ', [rfReplaceAll]);
Treba da ti je StrUtils ubacen u Uses klauzulu.

btw. ovo ne bi moglo da se zove podelom stringa.
Podela bi bila kada bi svaki deo stringa razdvojen znakom ';' trebao da se prekopira u novu varijablu. To onda postaje pravi CSV parser.

Dopuna: 15 Feb 2006 10:08

Evo ti kod za jedan CSV parser koji ucitava tekst iz fajla i unosi ga u StrgingGrid tako da svaka celija sadrzi po jedan deo stringa (razdvojeni znakom ';'). Kod je malo komplikovan jer mora da brine i o dodavanju kolona i redova u StringGrid. StringGrid ima jedan fiksan red u koji se ne upisuju podaci iz CSV fajla. Ukoliko linija u CSV fajlu ne sadrzi znak ';', onda linija nece uopste biti parsovana jer nije validna.
procedure TfrmMain.Button1Click(Sender: TObject);     // Load CSV var   Col, Row, PosComma: integer;   sField: string;   sLine: string;   f: textfile;   col_count: integer; begin   if OpenDialog1.Execute then      begin        AssignFile(f, OpenDialog1.FileName);        Reset(f);        Row := 0;        col_count := 1;        StringGrid1.RowCount := 2; //ova i sledeca linija su potrebne da bi        StringGrid1.FixedRows := 1; //StringGrid prihvatio jedan fiksni red        repeat  // pocni citanje iz fajla;          readln (f, sLine); // ucitaj celu liniju;               PosComma := Pos(';', sLine); //prvo ispitaj da li linija poseduje znak ';'          if PosComma > 0 then //ukoliko poseduje, onda je obradjujemo          begin            Row := Row + 1;            StringGrid1.RowCount := Row +1;             Col := 0;             repeat               if Col = col_count then col_count := col +1;               StringGrid1.ColCount := Col_count;               PosComma := Pos(';', sLine);               if PosComma > 0 then                 sField := Copy(sLine, 1, PosComma - 1)               else                 sField := sLine;               StringGrid1.Cells[Col, Row] := sField;               if PosComma > 0 then begin                 Delete(sLine, 1, PosComma);                 Col := Col + 1;               end;             until PosComma = 0;           end;        until EOF(f);        CloseFile(f);     end; end;



offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Evo objekta koji sam uradio za sve zive potrebe tog tipa

TStringTokenizer = class(TObject)   private     FDelimeter: Char;     FInputString: string;   public     constructor Create(s: string; Delim: Char); overload;     constructor Create; reintroduce; overload;     function GetLastToken: string;     function NextToken: string;     function Count: Integer;     property InputString: string read FInputString write FInputString;     property Delimeter: Char read FDelimeter write FDelimeter;   end; constructor TStringTokenizer.Create(s: string; Delim: Char); begin   FDelimeter := Delim;   FInputString := s; end; function TStringTokenizer.Count: Integer; var   s                      : string;   i, gde                 : Integer; begin   Result := 0;   s := FInputString;   if s = '' then     exit;   if pos(FDelimeter, s) = 0 then   begin     Result := 1;     exit;   end;   if s[1] = FDelimeter then     Delete(s, 1, 1);   if s[Length(s)] = FDelimeter then     s := copy(s, 1, Length(s) - 1);   i := 1;   while Pos(FDelimeter, s) <> 0 do   begin     gde := Pos(FDelimeter, s);     Delete(s, 1, gde);     inc(i);   end;   Result := i; end; constructor TStringTokenizer.Create; begin   inherited Create; end; function TStringTokenizer.NextToken: string; var   i                      : Integer; begin   i := pos(FDelimeter, FInputString);   if i < 1 then     i := Length(FInputString);   Result := Copy(FInputString, 1, i); //- 1);   if i > 0 then     Delete(FInputString, 1, i);   if Result <> '' then     if Result[Length(Result)] = FDelimeter then       Delete(Result, Length(Result), 1); end; function TStringTokenizer.GetLastToken: string; var   s                      : string;   gde                    : Integer; begin   s := FInputString;   if s[Length(s)] = FDelimeter then     s := copy(s, 1, Length(s) - 1);   while Pos(FDelimeter, s) <> 0 do   begin     gde := Pos(FDelimeter, s);     Delete(s, 1, gde);   end;   Result := s; end;

offline
  • Pridružio: 05 Maj 2005
  • Poruke: 84
  • Gde živiš: Cirikovac

Gospodo,mojom greskom je doslo do postavljanja dva pitanja sa identicnom sadrzinom.Od ponudjenih odgovora najvise mi odgovara resenje od Bobbya za Delphi.Puno pozdrava i da ste svi zivi i zdravi.

Ko je trenutno na forumu
 

Ukupno su 998 korisnika na forumu :: 216 registrovanih, 20 sakrivenih i 762 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 15694 - dana 01 Feb 2026 12:23

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, _stipa_, A.R.Chafee.Jr., advokat84, Aleksandar Šljivar, aleph_one, ALEXV, Aska, Asparagus, avijacija, babaroga, Babilon3, Bagration, bato_banjaluka, bb929, Bbbggg1979, bestguarder, bigbear, bigfoot, bilisrbija, blackjack, Bo96, bobpp, boj.an, Boris BM, BORUTUS, boskelazo, Bosnjo, bozomotika, bpvl, Bubimir, buducnost, bunker, ccoogg123, CHARLIE JA., Clouseau, coaa, cuvarkuca, Dannyboy, darkdruid72, darkkran, ddjxxi, DeerHunter, Demi87, DENIRO, Despot1, DezurniOperativni, djonsule, Djuza, draganca, draganl, draganst, Duce, Duk011, dukikan, dule10savic, Dungorth, dushan, Electron, Flanker-G, flash12, Georgius, GH69, Giskard, Gitzherai, GORDI, goxsys, Great White, grenadir, h8propaganda, halkin gol, hellenic, HogarStrashni, hyla, Inženjer Agašin, IQ116, Ir, istina, ivan1973, Jakonjveliki, Jan, Jecmendo, Jozo74, K-1A, kaput21, kendzo-andzo-boni-fju, knutveliki, Kobrim, Koca Popovic, Koce, kolateralnasteta, kreker, Kubovac, Kum Ruzvelt, lacko, lafa008, lakson001, Lance Guest, laurusri, Levi, ljubo70, lord sir giga, Lucije Kvint, lukac, Mae, Malahit, Manjane, marko.markovic, Markobreee, mat, matrix_1, max power, mercedesamg, Mig 29, MiGac, miki69, Milan 84, milenko crazy north, Miletić Zoran, MiljanXD, milos.cbr, milosz, minke, mir, mir juzni, mirkoro, MiroslavD, Misa63, Mitch22, Mićko, mnn2, molusan, N.e.m.a.nj.a., Natuzzi, nazgul75, nebkv, nebojsag, Nemanja.M, nextyamb, nikoladim, niksa517, Nmr, nsharambasa, Orc, OtacMakarije, Otto Grunf, pablojepao, paja69, Papadubi, peho_atropin, picknick, Polifon, Posmatrac77OKB, Povratak1912, Prašinar, precan, Qvazimodo, Radoslava, rambod, Ray1973, razumihin, Rebel Frank, Resnica, Rok A Bit, Roksi, sajbervulf, samo_citam, savuni, Semberija, Seven Of Nine, Sevetar, shadower78, Siti2, Slingshot, Smiljkovich, Smor, SOVO515, srbijaiznadsvega, Srki98, stegonosa, stevo svinja, Stoilkovic, Szigetwar, t.e.m.p.l.a.r., t84dar, tamno.nebo, TheDictator, theNedjeljko, tmanda323, tomo-hr, tomo2, Trimi68, Tumansky, Tunguska55, username_25, vathra, Velibor Radoja, vensla, vidra boy, vija, Vlad000, vlada035, Vlada1389, vladetije, Voja1978, Vojo06, Volfero, VPV, vrlenija, vzd1389, wild_ch1ld, YU-UKI, YugoSlav, Zanzibar, Zrcalo, Žrnov