Thread overview | |||||
---|---|---|---|---|---|
|
June 05, 2014 how to get line number after readln | ||||
---|---|---|---|---|
| ||||
I've got a program that reads a text file line by line (using std.stdio readln()) and I'd like to refer to the line number when I send a message to stderr upon finding a mis-formatted line. Is there a way to get the current line number? Of course, I could create a counter and increment it with each call to readln, but is there a "cool" way of doing this? Okay, call me lazy... just don't call me late for dinner! :-) Robert |
June 05, 2014 Re: how to get line number after readln | ||||
---|---|---|---|---|
| ||||
Posted in reply to Robert Hathaway | On 06/04/2014 05:05 PM, Robert Hathaway wrote: > I've got a program that reads a text file line by line (using std.stdio > readln()) Consider using byLine() instead. (Important: byLine uses an internal buffer for the line; so, don't forget to make a copy if you want to store the line for later use.) > and I'd like to refer to the line number when I send a message > to stderr upon finding a mis-formatted line. Is there a way to get the > current line number? Of course, I could create a counter and increment > it with each call to readln, but is there a "cool" way of doing this? > > Okay, call me lazy... just don't call me late for dinner! :-) > > Robert One cool way is a zipped sequence: import std.stdio; import std.range; void main() { foreach (i, line; zip(sequence!"n", File("deneme.txt").byLine)) { writefln("%s: %s", i, line); } } Ali |
June 05, 2014 Re: how to get line number after readln | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | On Thursday, 5 June 2014 at 00:33:26 UTC, Ali Çehreli wrote: > On 06/04/2014 05:05 PM, Robert Hathaway wrote: >> I've got a program that reads a text file line by line (using std.stdio >> readln()) > > Consider using byLine() instead. (Important: byLine uses an internal buffer for the line; so, don't forget to make a copy if you want to store the line for later use.) > > > and I'd like to refer to the line number when I send a message >> to stderr upon finding a mis-formatted line. Is there a way to get the >> current line number? Of course, I could create a counter and increment >> it with each call to readln, but is there a "cool" way of doing this? >> >> Okay, call me lazy... just don't call me late for dinner! :-) >> >> Robert > > One cool way is a zipped sequence: > > import std.stdio; > import std.range; > > void main() > { > foreach (i, line; zip(sequence!"n", File("deneme.txt").byLine)) { > writefln("%s: %s", i, line); > } > } > > Ali Once this[1] gets merged you'll be able to do this: foreach (lineNum, line; File("deneme.txt").byLine().enumerate(1)) writefln("%s: %s", lineNum, line); Which is a bit more clear about the intent. 1. https://github.com/D-Programming-Language/phobos/pull/1866 |
Copyright © 1999-2021 by the D Language Foundation