AW: [Oberon] string manipulation
Stauber Sven Philipp
sven.stauber at inf.ethz.ch
Tue Jun 22 14:24:23 MEST 2010
Hi,
> ... learning the *language*; and to talk about it?
Be sure you don't miss the A2 Programming Quickstart Guide (http://www.ocp.inf.ethz.ch/wiki/Documentation/Language). Also, there is an Oberon & Active Oberon board on our forum (http://www.ocp.inf.ethz.ch/forum/). On http://www.oberon.ethz.ch/bibliography/publications you'll find some "Programming in Oberon" books. Last but not least, there is a lot of code around...
> If yes, I have a first question: strings are defined as sequences of characters...
Actually, there are several ways how strings are represented. The simplest one is ARRAY OF CHAR for ASCII strings or UTF-8 encoded strings. In A2, the text system represents characters as LONGINT (Unicode) and strings therefore as ARRAY OF LONGINT.
> ... which will automatically be 0-terminated
No, not automatically. It is implementation specific whether some "string" manipulation functions always result in a new "string" (0X-terminated character sequence) or not.
I suggest that you have a quick look on the following modules:
Strings.Mod (ASCII string manipulation)
KernelLog.Mod (For "debug" output)
Streams.Mod (StringReader & StringWriter, for command output that can be redirected)
Also, for UTF8 and Unicode: Texts.Mod TextUtilities.Mod UTF8Strings.Mod
Best,
Sven
-----Ursprüngliche Nachricht-----
Von: oberon-bounces at lists.inf.ethz.ch [mailto:oberon-bounces at lists.inf.ethz.ch] Im Auftrag von spir
Gesendet: Dienstag, 22. Juni 2010 12:28
An: oberon
Betreff: [Oberon] string manipulation
Hello,
I'm an amateur programmer, completely new to Oberon. Is this a proper place to find help in learning the *language*; and to talk about it?
If yes, I have a first question: strings are defined as sequences of characters. But this only seems to define pieces of text in literal notation; there is I guess no corresponding type. If I get it correctly, then we are supposed to store and manipulate strings in ARRAYs OF CHAR, which will automatically be 0-terminated:
"If an expression e of type Te is assigned to a variable v of type Tv, the following happens:
...
if Tv is ARRAY n OF CHAR and e is a string of length m <n, v[i] becomes ei for i = 0..m -1 and v[m] becomes 0X. "
But this type is a bit unhandy, esp in the fact it cannot be RETURNed.
How are we supposed to deal with strings concretely? For instance, how can I write a procedure text intended to allow outputing a Position:
MODULE aTrial;
IMPORT Out;
TYPE
Position = RECORD
x : INTEGER;
y : INTEGER;
END;
PROCEDURE (VAR pos:Position) text() : ???;
VAR t : ARRAY OF CHAR;
BEGIN
RETURN ???; (* "x:pos.x,y:pos.y" *)
END;
VAR pos : Position;
BEGIN
pos.x := 1; pos.y := 2;
(* write pos.text to stdout *);
END aTrial.
If there is no builtin way to handle strings practically, how can one build a custom tool (a type) for this? I'm aware I could use POINTER TO ARRAY OF CHAR to pass strings around (*), but then I need to explicitely (de)reference all strings.
Another point about strings is the common need to output variable values (for examples, prototyping, testing...). Maybe it's only me beeing blind, but I cannot even find builtin tools to output atomic values... not to evoke arrays or records.
Denis
(*) Like in the example Trees module at §11 of the Oberon-2 language report.
________________________________
vit esse estrany ☣
spir.wikidot.com
--
Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
https://lists.inf.ethz.ch/mailman/listinfo/oberon
More information about the Oberon
mailing list