Re: Partition(divid string to substring
- To: mathgroup at smc.vnet.net
- Subject: [mg60961] Re: [mg60940] Partition(divid string to substring
- From: Igor Antonio <igora at wolf-ram.com>
- Date: Wed, 5 Oct 2005 02:28:00 -0400 (EDT)
- Organization: Wolfram Research, Inc.
- References: <200510040525.BAA17959@smc.vnet.net>
- Reply-to: igora at wolf-ram.com
- Sender: owner-wri-mathgroup at wolfram.com
Sara wrote: > I have to canstruct a method stringPartition[s,n] that divides a string s into substrings of length n. The last string shall be filled with spaces to the specified length.and I have too use StringTake. But i have done it Like that: > 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; > strCode = ToCharacterCode[str, "UTF8"]; > textPartition = Partition[strCode, n]; > textCode = FromCharacterCode[textPartition, "UTF8"] > ] > and its work, but I dont know how to use Stringtake instead (toCharacterCode), I dont want to use Toharachtercode. > Thanks Sara, You *have* to use StringTake? Sounds like a homework assignment, in which case figuring out what the code below does "is left as an exercise to the reader." :-) It's probably not the cleanest code, but just what I came up with last night. The idea is to create a list of the positions that follow the syntax for the second argument of StringTake: StringTake["string", {m, n}] a gives characters m through n in "string". Once you have that list of pairs, it's just a matter of mapping your StringTake function over that list + dealing with your requirement of padding the last one with spaces. myFunc[str_String, n_Integer] := Module[{remainder, div, posList, lastNum, lastSubStr}, remainder = Mod[StringLength[str], n]; div = Floor[StringLength[str]/n]; posList = NestList[#1 + n & , 0, div]; posList = ({1, 0} + #1 & ) /@ Partition[posList, 2, 1, {1, -1}]; If[remainder == 0, (StringTake[str, #1] & ) /@ posList, lastNum = Last[Last[posList]] + 1; lastSubStr = StringTake[str, {lastNum, StringLength[str]}]; lastSubStr = StringInsert[lastSubStr, " ", NestList[Plus, StringLength[lastSubStr] + 1, n - StringLength[lastSubStr]]]; Join[(StringTake[str, #1] & ) /@ posList, {lastSubStr}]]] (myFunc["thisIsAStringThatsVeryLong", #1] & ) /@ Range[26] gives { {"t", "h", "i", "s", "I", "s", "A", "S", "t", "r", "i", "n", "g", "T", "h", "a", "t", "s", "V", "e", "r", "y", "L", "o", "n", "g"}, {"th", "is", "Is", "AS", "tr", "in", "gT", "ha", "ts", "Ve", "ry", "Lo", "ng"}, {"thi", "sIs", "ASt", "rin", "gTh", "ats", "Ver", "yLo", "ng "}, {"this", "IsAS", "trin", "gTha", "tsVe", "ryLo", "ng "}, {"thisI", "sAStr", "ingTh", "atsVe", "ryLon", "g "}, {"thisIs", "AStrin", "gThats", "VeryLo", "ng "}, {"thisIsA", "StringT", "hatsVer", "yLong "}, {"thisIsAS", "tringTha", "tsVeryLo", "ng "}, {"thisIsASt", "ringThats", "VeryLong "}, {"thisIsAStr", "ingThatsVe", "ryLong "}, {"thisIsAStri", "ngThatsVery", "Long "}, {"thisIsAStrin", "gThatsVeryLo", "ng "}, {"thisIsAString", "ThatsVeryLong"}, {"thisIsAStringT", "hatsVeryLong "}, {"thisIsAStringTh", "atsVeryLong "}, {"thisIsAStringTha", "tsVeryLong "}, {"thisIsAStringThat", "sVeryLong "}, {"thisIsAStringThats", "VeryLong "}, {"thisIsAStringThatsV", "eryLong "}, {"thisIsAStringThatsVe", "ryLong "}, {"thisIsAStringThatsVer", "yLong "}, {"thisIsAStringThatsVery", "Long "}, {"thisIsAStringThatsVeryL", "ong "}, {"thisIsAStringThatsVeryLo", "ng "}, {"thisIsAStringThatsVeryLon", "g "}, {"thisIsAStringThatsVeryLong"} } -- Igor C. Antonio Wolfram Research, Inc. http://www.wolfram.com To email me personally, remove the dash.
- References:
- Partition(divid string to substring
- From: Sara <ma_sara177@hotmail.com>
- Partition(divid string to substring