Re: partitioning a string
- To: mathgroup at smc.vnet.net
- Subject: [mg60966] Re: partitioning a string
- From: Peter Pein <petsie at dordos.net>
- Date: Wed, 5 Oct 2005 02:28:12 -0400 (EDT)
- References: <dht45r$hks$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Sara schrieb:
> I have tred to partition a String and iwrote this code but its take to time to run, and it doesnt show eny result.
> stringPartition[s_, n_] := Module[{}, emptyString = Mod[StringLength[s], n];
> If[emptyString != 0, empt = n - emptyString];
> str1 := " ";
> str2 := "";
> For[i = 1, i <= empt, i++, str2 = str2 <> str1];
> str = s <> str2;
> M = StringLength[str];
> yasList = Range[1, M/n] ;
> For[i = 1, i <= M, i + n, For[j = 1, j <= M/n, j++,
> yasList[[j]] = StringTake[i, j*n]
> ];
> ];
>
Hi Sara,
1.) even if the closing "]" from Module would be there, your function
would return Null, because the nested For ends with a semicolon.
2.) empt will be uninitialized, when emptyString==0 and the first For
will fail.
3.) in general: do not use variable names starting with a capital letter
(M in this case). They are commonly used for function names (like N).
4.) the statement i+n should become the assignment i+=n or i=i+n.
5.) I guess StringTake[i,j] should read StringTake[str,[i,j}]?
6.) you assign values to a global variable yasList ("yet another
string"?) but don't use them.
b.t.w.: if you are using Module it would be a great idea to declare all
local variables as local ;-)
It would have been easier, to construct a list of the characters of s,
partition this list and reassemble the strings. If I interpret your code
correctly, you want to append spaces to your string until its length is
a multiple of n.
stringPartition[s_,n_]:=
StringJoin @@@ Partition[Characters[s], n, n, {1, 1}, {" "}]
please see the documetation for details about Partition.
stringPartition["A string", 3] // InputForm
gives:
{"A S", "tri", "ng "}
Peter