Wyciągnąć string z nawiasu

0

Witam ;-)

Mam string wyglądający np. tak:

Aaaaa (bbbb)

Jak dobrać się do nawiasu? Czyli żeby wydostać 'bbbb'? Da się to zrobić bez kombinowania ze StringList-ami itp.?

0

var
s,nowy:string;
begin
s:='AAAA (bbb)';
nowy:=copy(s,pos('(',s)+1,pos(')',s)-pos('(',s)-1);
showmessage(nowy);
end;

pozdro:]

lub jak wolisz może być w pętli

var
s,nowy:string;
x:integer;
begin
s:='AAAA (bbb)';
for x:=pos('(',s)+1 to pos(')',s)-1 do nowy:=nowy+s[x];
end;

0

odpowiednio funkcje get tex between get zawias text, delete tag, get all in nawias te unkcje ci pomoga

//Unit: StRiNg_UnIt
//By: [KmH][AsE]AS-ZIOMBER
//url: http://www.ziomber.republika.pl
unit string_unit;

interface
uses sysutils, classes, noxx_math, dialogs;


const
purehtmlink = '@#$^&*(){}[]:;"<,>`~?|_-+=';


type talphabet = object
table : array[0..26] of char;

function find_char(s : string) : byte; //something like chr & ord :P
function find_ord(x : byte) : string; //something like chr & ord :P
function isin_alphabet(x : char): boolean;
procedure initialize_table;          //insert abcde... to table[]
end;


type tcustom_selection=record
start,length : longint;
end;



var
int_table                                                                       : array[0..10] of string = ('-','0','1','2','3','4','5','6','7','8','9');
w_nawiasie                                                                      : array[0..10] of array of string;
w_nawiasie_used                                                                 : array[0..10] of boolean;
function get_text_between(b1, b2, original_str : string)                        : string;
function extracturlfilename(url : string)                                       : string;
function delete_all_str(what_del, original_str : string)                        : string;
function get_zawias_text(line : string)                                         : string;
function get_zawias_text2(line : string)                                        : string;
function kx(text : string; k : real)                                            : string;
function change_filename_ext(filename : string; ext : string)                   : string;
function booltostring(boolvalue : boolean)                                      : string;
function booltostring2(boolvalue : boolean)                                     : string;
function deletetag(tag1,tag2 : string;var text : string)                           : string;
function is_intinstr(str : string)                                              : boolean;
function is_strmailaddr(url : string)                                           : boolean;
function stringtobool(str : string)                                             : boolean;
function onetxtinanother(maintext, substring : string)                          : boolean;
function find_line_text(from : integer; text : tstrings; tofind : string)       : integer;
function howmuchspaces(text : string)                                           : integer;
function numberofchars(line : string; charstr : string)                         : integer;
function gettriangleobjline(line :string; triangleindex : integer)              : t3dpoint;
function findtext(text : string; tofind : string)                               : tcustom_selection;
function getvaluehash(list : tstrings; value_name : string)                     : string;
function get_before_char(text : string; sign : string; casesensitive : boolean) : string;
function get_after_char(text : string; sign : string; casesensitive : boolean)  : string;

procedure get_all_in_nawias(line_in_nawias, znak : string; index : integer);
function numberofchars2(line : string; charstr : string)                  : integer;
function get_filename_ext(filename : string)                   : string;
function lth(s : string) : integer;
function deleteURLFILENAME(url : string) : string;
function validURL_FILE(url : string) : boolean;
function validate_URL(url : string) : string;
function validate_URL2(url : string) : byte;
procedure showmsgint(i : integer);
procedure FILTRUJ_plik_map_SWIATLA(var s : tstrings);
function get_filename(filename : string)                   : string;
implementation


procedure showmsgint(i : integer);
begin
showmessage(inttostr(i));
end;

procedure FILTRUJ_plik_map_SWIATLA(var s : tstrings);
var
o : tstrings;
I,j : integer;

temps : string;
TAG_2: string;
ODs,DOs : integer;
toswiatlo : boolean;
begin
o.text := s.text;
s.clear;

for i:=0 to o.count-1 do begin
toswiatlo := false;

if pos('{',o[i]) > 0 then begin
ODs := i;
DOs := 0;
for j:=i to o.count-1 do if pos('}',o[i]) > 0 then begin Dos := j; break; end;

for j:=i to o.count-1 do if pos('"classname"',lowercase(s[j])) > 0 then  begin
temps := s[j];
delete(temps,1,length('"classname"'));
TAG_2 := deletetag('"','"',temps);
if lowercase(TAG_2) = 'light' then toswiatlo := true;
end;

end;
if toswiatlo = true then begin
for j:=ODs to DOs do
s.add(o[j]);

end;
end;

end;

function get_before_char(text : string; sign : string; casesensitive : boolean) : string;
var
s : string;
begin
s := text;
if casesensitive = false then
delete(s,pos(lowercase(sign),lowercase(s)),length(s)) else
delete(s,pos(sign,s),length(s));
//
delete(s,1,pos(sign,s));
result := s;
end;

function get_after_char(text : string; sign : string; casesensitive : boolean) : string;
var
s : string;
begin
s := text;
if casesensitive = false then
delete(s,1,pos(lowercase(sign),lowercase(s))) else
delete(s,1,pos(sign,s));
//

result := s;
end;

function getvaluehash(list : tstrings; value_name : string)                     : string;
var
i : integer;
begin
for i:=0 to list.count - 1 do
if pos(lowercase(value_name),lowercase(list[i])) > 0 then
begin

result := get_text_between('"','"',list[i]);
exit;
end;
end;

function deletetag(tag1,tag2 : string;var text : string)                              : string;
var
i : integer;
cnt : integer;
begin
cnt := 0;
for I:=1 to length(text) do
if text[i] = tag1 then
cnt := cnt + 1;

for I:=0 to cnt do
if pos(tag1,text) > 0 then
if pos(tag2,text) > 0 then
delete(text,pos(tag1,text),pos(tag2,text)-pos(tag1,text)+1);
result := text;
end;


function numberofchars(line : string; charstr : string)                         : integer;
var
i : integer;
begin
result := 0;
        for i:=1 to length(line) do
                if lowercase(line[i]) = lowercase(charstr) then result := result + 1;
end;

function lth(s : string) : integer;
begin
result := length(s);
end;

function numberofchars2(line : string; charstr : string)                         : integer;
var
line2 : string;
begin
line2 := line;
result := 0;
while pos(lowercase(charstr),lowercase(line2)) > 0 do begin
delete(line2,1,pos(lowercase(charstr),lowercase(line2))+length(charstr));
result := result + 1;
end;
end;

function gettriangleobjline(line :string; triangleindex : integer) : t3dpoint;
var
s : string;
begin
s := line;
delete(s,1,2);
s := stringreplace(s,'//',' ',[rfReplaceAll]);
get_all_in_nawias(s,' ',0);
result.x := strtofloat(w_nawiasie[0][triangleindex*3]);
result.y := strtofloat(w_nawiasie[0][triangleindex*3+1]);
result.z := strtofloat(w_nawiasie[0][triangleindex*3+2]);
end;

function kx(text : string; k : real)                                            : string;
var
x,y,z : real;
begin
get_all_in_nawias(get_zawias_text(text),'.',2);
x := strtofloat(w_nawiasie[2][0])*k;
y := strtofloat(w_nawiasie[2][1])*k;
z := strtofloat(w_nawiasie[2][2])*k;
result := 'glvertex3f('+floattostr(x)+'.'+floattostr(y)+'.'+floattostr(z)+');';
end;

function onetxtinanother(maintext, substring : string)                          : boolean;
var
lol     : tcustom_selection;
begin
if pos(lowercase(substring),lowercase(maintext)) <= 0 then begin lol.start := -1; result := false; exit;   end else begin
result := true;
end;
end;

function booltostring(boolvalue : boolean) : string;
begin
if boolvalue = true then result := 'true' else result := 'false';
end;

function booltostring2(boolvalue : boolean) : string;
begin
if boolvalue = true then result := '1' else result := '0';
end;

function stringtobool(str : string) : boolean;
begin
if lowercase(str) = 'true'      then result := true;
if lowercase(str) = 'false'     then result := false;
if lowercase(str) = '1'         then result := true;
if lowercase(str) = '0'         then result := false;
end;

function change_filename_ext(filename : string; ext : string)                   : string;
var
s : string;
begin
s := extractfilename(filename);
delete(s,pos('.',s),length(s));
s:= s+'.'+ext;
result := s;
end;


function get_filename_ext(filename : string)                   : string;
var
s : string;
begin
s := extractfilename(filename);
delete(s,1,pos('.',s));
result := s;
end;


function get_filename(filename : string)                   : string;
var
s : string;
begin
s := extractfilename(filename);
delete(s,pos('.',s),length(s));
result := s;
end;

function findtext(text : string; tofind : string) : tcustom_selection;
var
lol     : tcustom_selection;
begin
lol.length := length(tofind);
if pos(lowercase(tofind),lowercase(text)) <= 0 then begin lol.start := -1; result := lol; exit;   end;

lol.start := pos(lowercase(tofind),lowercase(text))-1;
result := lol;
end;


function find_line_text(from : integer; text : tstrings; tofind : string)       : integer;
var
imo : tcustom_selection;
i : integer;
begin

for i:=from to text.count-1         do
begin
imo := findtext(text[i],tofind);
if imo.start > -1 then
begin
result := i;
exit;
end;

end;
result := -1;
end;

function talphabet.find_ord(x : byte) : string;
begin
result := table[x];
end;

function talphabet.isin_alphabet(x : char): boolean;
var
i : integer;
begin
result := false;
for i:=0 to high(table) do
if lowercase(table[i]) = lowercase(x) then begin result := true; break; end;

//showmessage(x+ ' BOOL '+booltostring(result));
end;



function talphabet.find_char(s : string) : byte;
var
i : integer;
begin
s := uppercase(s);
for i:=0 to 26 do
if s = table[i] then
begin
result := i;
break;
end;
end;

procedure talphabet.initialize_table;
var
i : integer;
const
alfabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
begin
for i:=0 to 26 do
table[i] := alfabet[i];
end;




/////////




procedure get_all_in_nawias(line_in_nawias, znak : string; index : integer);
var
i, i2      : integer;
ile_kropek : integer;
p          : integer;
s          : string;
originalstr: string;
begin
//1 faza
//if w_nawiasie_used[i] = true then begin showmessage('TO JEST UZYWANE ZARAZ SIE PROGRAM SPIERDOLI :o)'); exit; end;
//w_nawiasie_used[i] := true;
znak := lowercase(znak);
line_in_nawias := line_in_nawias+znak;
s := line_in_nawias;
ile_kropek := 0;
for i:=0 to length(s) do
begin
if pos(znak, s) > 0 then
begin
delete(s,1,pos(znak, s));
inc(ile_kropek);
end;
end;
if ile_kropek = 0 then
setlength(w_nawiasie[index],1)
else
setlength(w_nawiasie[index],ile_kropek);


//2 faza
s := line_in_nawias;
originalstr := s;
 i2 := 0;
 p := Pos(znak, s);
 while p>0 do
 begin
  w_nawiasie[index][i2] := copy(s, 1, p-1);
  Delete(s, 1, p);
  Inc(i2);
  p := Pos(znak, s);
 end;
end;

function get_zawias_text(line : string)   : string;
var
lol : string;
begin
lol := line;
delete(lol,1,pos('(',lol));
delete(lol,pos(')',lol),length(lol));
result := lol;
end;


function get_zawias_text2(line : string)   : string;
var
lol : string;
begin
lol := line;
delete(lol,1,pos('[',lol));
delete(lol,pos(']',lol),length(lol));
result := lol;
end;


function howmuchspaces(text : string) : integer;
var
i,count : integer;
begin
count := 0;
for i:=0 to length(text) do
if pos(' ',text) > 0 then inc(count);

result := count;
end;



function delete_all_str(what_del, original_str : string) : string;
var
lol : string;
i : integer;
begin
what_del := lowercase(what_del);
lol := lowercase(original_str);
for i:=0 to length(lol) do
delete(original_str,pos(what_del,lol),length(what_del));

result := original_str;
end;


function extracturlfilename(url : string) : string;
var
s : string;
i : integer;
begin
if pos('/',url) <= 0 then begin result := url; exit; end;
s := url;
for i:=0 to length(url) do
delete(s,1,pos('/',s));
if pos('%20',s) > 0 then
s := stringreplace(s,'%20',' ',[rfreplaceall,rfignorecase]);
result := s;
end;

function validate_URL(url : string) : string;
var
s : string;
res : byte;
begin
res := 255;
if pos('www',lowercase(s)) <= 0 then res := 0;
if pos('http',lowercase(s)) <= 0 then res := 1;
if (pos('www',lowercase(s)) <= 0) and (pos('http',lowercase(s)) <= 0 ) then res := 2;
case res of
0: result := 'www.'+url;
1: result := 'http://'+url;
2: result := 'http://www.'+url;
end;
end;

function validate_URL2(url : string) : byte;
var
s : string;

begin
result := 255;
if pos('www',lowercase(s)) <= 0 then result := 0;
if pos('http',lowercase(s)) <= 0 then result := 1;
if (pos('www',lowercase(s)) <= 0) and (pos('http',lowercase(s)) <= 0 ) then result := 2;

end;
                
function validURL_FILE(url : string) : boolean;
var
i : integer;
found : integer;
s : string;
found2 : integer;
raz : byte;
begin
result := false;
if pos('/',url) <= 0 then begin result := false; exit; end;
if extracturlfilename(url) = url then begin result := false; exit; end;
found := 0;found2 := 0;raz:=0;

s := url;
for i:=length(s) downto 1 do begin

//showmessage(s[i]);
//showmessage(inttostr(raz));
if s[i] = '/' then begin found2 := i; raz:=raz+1; end;
if s[i] = '.' then begin found := i; raz:=raz+1; end;

if raz = 2 then begin  break; end;
end;
if found2 < found then begin result := true; exit;end;//we have a file
// jak www.xxx.xx/xxxxx.xxx = result true
if found2 > found then begin result := false;exit; end;//we have a directory
// jak www.xxx.xx/xxxxx = result false

end;





function deleteURLFILENAME(url : string) : string;
var
s : string;
x : string;
begin
if pos('/',url) <= 0 then begin result := url; exit; end;
result := url;
s := url;
x := extracturlfilename(url);
delete(s,length(s)-length(x)+1,length(x)+10);
{for i:=length(url) downto 1 do
if url[i] = '/' then begin
delete(s,length(s),i);     }
if pos('%20',s) > 0 then
s := stringreplace(s,'%20',' ',[rfreplaceall,rfignorecase]);
result := s;
exit;

end;

//funkcja do kitu
function is_strmailaddr(url : string) : boolean;
begin
if pos(' ',url)  > 0 then begin  result := false;  exit; end;
if pos('@',url) > 0 then result := true else result := false;
end;



function is_intinstr(str : string) : boolean;
var
i,i2 : integer;
f : boolean;
begin
result := false;
f := false;
for i:=0 to length(str) do
for i2:=0 to high(int_table) do
if str[i] = int_table[i2] then
begin
result := true;
f := true;
exit;
end;
//mini zabezpieczenie
if f = true then begin result := true; exit; end;
result := false;
end;

function get_text_between(b1, b2, original_str : string) : string;
var
i   : integer;
lol : string;
begin
result := '';
lol := lowercase(original_str);
b1 := lowercase(b1);
b2 := lowercase(b2);
if not pos(b1,lol) > 0 then exit;
if not pos(b2,lol) > 0 then exit;
delete(original_str,1,pos(b1,lol)+length(b1)-1);
delete(lol,1,pos(b1,lol)+length(b1)-1);
delete(original_str,pos(b2,lol),length(original_str));
result := original_str;
end;

end.
0

o bogowie, czlowieeekuuu.. czemus Ty tego nie przycial do potrzebnego minimum??

0

Komórkowy przesadziłeś %)

0

Ja pier... więcej nie miałeś?

0

hahaha, ale pr0!
czy jak ktoś pyta o otwarcie pliku to podajesz mu źródła systemu operacyjnego? ehh..

0

mi sie podoba takie podejscie do tematu [rotfl]

0
Johny_Morfina napisał(a)

mi sie podoba takie podejscie do tematu [rotfl]

To jak ktoś się zapyta ja się połączyć z bazą SQL poprzez EOS to wkleję źródła ZEOSów (jakieś 140000 wierszy kodu).

1 użytkowników online, w tym zalogowanych: 0, gości: 1