Text between: Difference between revisions

Content added Content deleted
(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}}==