Text between: Difference between revisions
Content added Content deleted
Alpha bravo (talk | contribs) |
(Added solution for Action!) |
||
Line 128: | Line 128: | ||
V endString = :argv[3] |
V endString = :argv[3] |
||
print(textBetween(thisText, startString, endString))</lang> |
print(textBetween(thisText, startString, endString))</lang> |
||
=={{header|Action!}}== |
|||
<lang Action!>BYTE FUNC Matches(CHAR ARRAY text,sub BYTE index) |
|||
CHAR ARRAY tmp(255) |
|||
SCopyS(tmp,text,index,index+sub(0)-1) |
|||
IF SCompare(tmp,sub)=0 THEN |
|||
RETURN (1) |
|||
FI |
|||
RETURN (0) |
|||
BYTE FUNC FindFrom(CHAR ARRAY text,delim BYTE start) |
|||
BYTE i,end |
|||
IF text(0)<delim(0) OR delim(0)=0 THEN |
|||
RETURN (0) |
|||
FI |
|||
end=text(0)-delim(0)+1 |
|||
FOR i=start TO end |
|||
DO |
|||
IF Matches(text,delim,i) THEN |
|||
RETURN (i) |
|||
FI |
|||
OD |
|||
RETURN (0) |
|||
PROC TextBetween(CHAR ARRAY text,start,end,res) |
|||
BYTE first,last |
|||
IF SCompare(start,"start")=0 THEN |
|||
first=1 |
|||
ELSE |
|||
first=FindFrom(text,start,1) |
|||
IF first=0 THEN |
|||
res(0)=0 |
|||
RETURN |
|||
ELSE |
|||
first==+start(0) |
|||
FI |
|||
FI |
|||
IF SCompare(end,"end")=0 THEN |
|||
last=text(0) |
|||
ELSE |
|||
last=FindFrom(text,end,first+1) |
|||
IF last<=first THEN |
|||
last=text(0) |
|||
ELSE |
|||
last==-1 |
|||
FI |
|||
FI |
|||
SCopyS(res,text,first,last) |
|||
RETURN |
|||
PROC Test(BYTE n CHAR ARRAY text,start,end) |
|||
CHAR ARRAY res(255) |
|||
TextBetween(text,start,end,res) |
|||
PrintF("Ex%B. ""%S""%E%E",n,res) |
|||
RETURN |
|||
PROC Main() |
|||
Test(1,"Hello Rosetta Code world","Hello "," world") |
|||
Test(2,"Hello Rosetta Code world","start"," world") |
|||
Test(3,"Hello Rosetta Code world","Hello ","end") |
|||
Test(4,"</div><div style=\""chinese\"">???</div>","<div style=\""chinese\"">","</div>") |
|||
Test(5,"<text>Hello <span>Rosetta Code</span> world</text><table style=\""myTable\"">","<text>","<table>") |
|||
Test(6,"<table style=\""myTable\""><tr><td>hello world</td></tr></table>","<table>","</table>") |
|||
Test(7,"The quick brown fox jumps over the lazy other fox","quick "," fox") |
|||
Test(8,"One fish two fish red fish blue fish","fish "," red") |
|||
Test(9,"FooBarBazFooBuxQuux","Foo","Foo") |
|||
RETURN</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Text_between.png Screenshot from Atari 8-bit computer] |
|||
<pre> |
|||
Ex1. "Rosetta Code" |
|||
Ex2. "Hello Rosetta Code" |
|||
Ex3. "Rosetta Code world" |
|||
Ex4. "???" |
|||
Ex5. "Hello <span>Rosetta Code</span> world</text><table style=\"myTable\">" |
|||
Ex6. "" |
|||
Ex7. "brown" |
|||
Ex8. "two fish" |
|||
Ex9. "BarBaz" |
|||
</pre> |
|||
=={{header|Ada}}== |
=={{header|Ada}}== |