digitalmars.D.learn - Formatted output ranges
- Dennis Ritchie (31/31) Apr 11 2015 Hi,
- anonymous (2/11) Apr 11 2015 writefln("%(;; %(%s, %),\n%).", a.chunks(15));
- Dennis Ritchie (2/14) Apr 11 2015 Thanks.
- Dennis Ritchie (15/15) Apr 11 2015 I also want to know whether it is possible to D somehow set the
- Dennis Ritchie (37/39) Apr 11 2015 I got to do this:
- Ivan Kazmenko (3/18) Apr 17 2015 Looks like there's std.string.wrap to do that:
- Dennis Ritchie (12/33) Apr 17 2015 Yes, it's a lot better but I did not get to concatenate the
- Ivan Kazmenko (2/13) Apr 20 2015 writeln(wrap(a, 30, ";; ", ";; "));
- Dennis Ritchie (2/4) Apr 20 2015 Thanks.
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.
Apr 11 2015
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));
Apr 11 2015
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:Thanks.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));
Apr 11 2015
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
Apr 11 2015
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
Apr 11 2015
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/hGgugeLooks like there's std.string.wrap to do that: http://forum.dlang.org/thread/mgqiji$727$1 digitalmars.com
Apr 17 2015
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: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/jsSbKjI 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/hGgugeLooks like there's std.string.wrap to do that: http://forum.dlang.org/thread/mgqiji$727$1 digitalmars.com
Apr 17 2015
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/jsSbKjwriteln(wrap(a, 30, ";; ", ";; ")); Works with dmd 2.066.1 and 2.067.0.
Apr 20 2015
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.
Apr 20 2015