Thread overview | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
April 11, 2015 Formatted output ranges | ||||
---|---|---|---|---|
| ||||
Hi, Is it possible to write somehow shorter using formatted output and other library functions? ----- import std.stdio, std.range; void main() { auto a = iota(100, 201); writefln("%(;; %(%s, %),\n%).", [ a[0 .. 15], a[15 .. 30], a[30 .. 45], a[45 .. 60], a[60 .. 75], a[75 .. 90], a[90 .. $] ]); } ----- ;; 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, ;; 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, ;; 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, ;; 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, ;; 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, ;; 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, ;; 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200. |
April 11, 2015 Re: Formatted output ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis Ritchie | On Saturday, 11 April 2015 at 20:10:49 UTC, Dennis Ritchie wrote:
> writefln("%(;; %(%s, %),\n%).", [
> a[0 .. 15],
> a[15 .. 30],
> a[30 .. 45],
> a[45 .. 60],
> a[60 .. 75],
> a[75 .. 90],
> a[90 .. $]
> ]);
writefln("%(;; %(%s, %),\n%).", a.chunks(15));
|
April 11, 2015 Re: Formatted output ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to anonymous | On Saturday, 11 April 2015 at 20:37:17 UTC, anonymous wrote:
> On Saturday, 11 April 2015 at 20:10:49 UTC, Dennis Ritchie wrote:
>> writefln("%(;; %(%s, %),\n%).", [
>> a[0 .. 15],
>> a[15 .. 30],
>> a[30 .. 45],
>> a[45 .. 60],
>> a[60 .. 75],
>> a[75 .. 90],
>> a[90 .. $]
>> ]);
>
> writefln("%(;; %(%s, %),\n%).", a.chunks(15));
Thanks.
|
April 11, 2015 Re: Formatted output ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis Ritchie | I also want to know whether it is possible to D somehow set the maximum width of the print string in characters? ----- void main() { import std.stdio, std.range; writefln(";; %(%s, %)).", iota(10, 1101)); } ----- For example, here's the code to Common Lisp which is given by the width of the line is 30 characters: ----- (let ((a (loop :for i :from 10 :to 1100 :collect i))) (format t "~%;;~{ ~<~%;; ~1,30:;~S~>~^,~}.~%" a)) ----- http://ideone.com/hGguge |
April 12, 2015 Re: Formatted output ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis Ritchie | On Saturday, 11 April 2015 at 22:45:39 UTC, Dennis Ritchie wrote: > I also want to know whether it is possible to D somehow set the maximum width of the print string in characters? I got to do this: ----- import std.stdio, std.range, std.conv, std.array; void formatWidthIotaToStr(ref string formatStr, int[] inputRange) { formatStr ~= ";;"; int formatWidth = 30, lenStr = formatStr.length; foreach (e; inputRange) { lenStr += e.text.length; if (lenStr < formatWidth) { lenStr += 2; formatStr ~= ' ', formatStr ~= e.text, formatStr ~= ','; } else { formatStr ~= "\n;; ", formatStr ~= e.text, formatStr ~= ','; lenStr = e.text.length + 5; } } formatStr.length -= 1; formatStr ~= '.'; } void main() { auto a = iota(10, 1101).array; string s; formatWidthIotaToStr(s, a); writeln(s); } ----- http://ideone.com/Yoohbk |
April 17, 2015 Re: Formatted output ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis Ritchie | On Saturday, 11 April 2015 at 22:45:39 UTC, Dennis Ritchie wrote: > I also want to know whether it is possible to D somehow set the maximum width of the print string in characters? > > ----- > void main() { > import std.stdio, std.range; > writefln(";; %(%s, %)).", iota(10, 1101)); > } > ----- > > For example, here's the code to Common Lisp which is given by the width of the line is 30 characters: > ----- > (let ((a (loop :for i :from 10 :to 1100 :collect i))) > (format t "~%;;~{ ~<~%;; ~1,30:;~S~>~^,~}.~%" a)) > ----- > http://ideone.com/hGguge Looks like there's std.string.wrap to do that: http://forum.dlang.org/thread/mgqiji$727$1@digitalmars.com |
April 17, 2015 Re: Formatted output ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ivan Kazmenko | On Friday, 17 April 2015 at 09:25:43 UTC, Ivan Kazmenko wrote: > On Saturday, 11 April 2015 at 22:45:39 UTC, Dennis Ritchie wrote: >> I also want to know whether it is possible to D somehow set the maximum width of the print string in characters? >> >> ----- >> void main() { >> import std.stdio, std.range; >> writefln(";; %(%s, %)).", iota(10, 1101)); >> } >> ----- >> >> For example, here's the code to Common Lisp which is given by the width of the line is 30 characters: >> ----- >> (let ((a (loop :for i :from 10 :to 1100 :collect i))) >> (format t "~%;;~{ ~<~%;; ~1,30:;~S~>~^,~}.~%" a)) >> ----- >> http://ideone.com/hGguge > > Looks like there's std.string.wrap to do that: > http://forum.dlang.org/thread/mgqiji$727$1@digitalmars.com Yes, it's a lot better but I did not get to concatenate the string ";;" in each paragraph: ----- import std.conv, std.stdio, std.range, std.string; void main() { auto a = iota(10, 1101).text; a = a[1 .. $ - 1], a ~= '.'; writeln(wrap(a, 30)); } ----- http://ideone.com/jsSbKj |
April 20, 2015 Re: Formatted output ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis Ritchie | > Yes, it's a lot better but I did not get to concatenate the string ";;" in each paragraph:
>
> -----
> import std.conv, std.stdio, std.range, std.string;
>
> void main() {
>
> auto a = iota(10, 1101).text;
>
> a = a[1 .. $ - 1], a ~= '.';
>
> writeln(wrap(a, 30));
> }
> -----
> http://ideone.com/jsSbKj
writeln(wrap(a, 30, ";; ", ";; "));
Works with dmd 2.066.1 and 2.067.0.
|
April 20, 2015 Re: Formatted output ranges | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ivan Kazmenko | On Monday, 20 April 2015 at 17:16:21 UTC, Ivan Kazmenko wrote:
> writeln(wrap(a, 30, ";; ", ";; "));
>
> Works with dmd 2.066.1 and 2.067.0.
Thanks.
|
Copyright © 1999-2021 by the D Language Foundation