www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Formatted output ranges

reply "Dennis Ritchie" <dennis.ritchie mail.ru> writes:
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
parent reply "anonymous" <anonymous example.com> writes:
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
parent reply "Dennis Ritchie" <dennis.ritchie mail.ru> writes:
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.
Apr 11 2015
parent reply "Dennis Ritchie" <dennis.ritchie mail.ru> writes:
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
next sibling parent "Dennis Ritchie" <dennis.ritchie mail.ru> writes:
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
prev sibling parent reply "Ivan Kazmenko" <gassa mail.ru> writes:
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
Apr 17 2015
parent reply "Dennis Ritchie" <dennis.ritchie mail.ru> writes:
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
Apr 17 2015
parent reply "Ivan Kazmenko" <gassa mail.ru> writes:
 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.
Apr 20 2015
parent "Dennis Ritchie" <dennis.ritchie mail.ru> writes:
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