Tokenize a string with escaping: Difference between revisions

Content added Content deleted
m (→‎{{header|Phix}}: added syntax colouring the hard way)
(Ada version)
Line 178: Line 178:
>
>
</pre>
</pre>

=={{header|Ada}}==
<lang Ada>with Ada.Text_Io;
with Ada.Containers.Indefinite_Vectors;
with Ada.Strings.Unbounded;

procedure Tokenize is

package String_Vectors is
new Ada.Containers.Indefinite_Vectors (Positive, String);
use String_Vectors;

function Split (Text : String;
Separator : Character := '|';
Escape : Character := '^') return Vector
is
use Ada.Strings.Unbounded;
Result : Vector;
Escaped : Boolean := False;
Accu : Unbounded_String;
begin

for Char of Text loop

case Escaped is

when False =>
if Char = Escape then
Escaped := True;
elsif Char = Separator then
Append (Result, To_String (Accu));
Accu := Null_Unbounded_String;
else
Append (Accu, Char);
end if;

when True =>
Append (Accu, Char);
Escaped := False;

end case;

end loop;
Append (Result, To_String (Accu));

return Result;
end Split;

procedure Put_Vector (List : Vector) is
use Ada.Text_Io;
begin
for Element of List loop
Put ("'"); Put (Element); Put ("'"); New_Line;
end loop;
end Put_Vector;

begin
Put_Vector (Split ("one^|uno||three^^^^|four^^^|^cuatro|"));
end Tokenize;</lang>
{{out}}
<pre>'one|uno'
''
'three^^'
'four^|cuatro'
''</pre>


=={{header|ALGOL 68}}==
=={{header|ALGOL 68}}==