Can you read the next line while iterating over byLine?
Jack Stouffer via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Feb 2 10:34:23 PST 2017
On Thursday, 2 February 2017 at 18:18:13 UTC, John Doe wrote:
> Let's say you're trying to parse a file format like:
>
> Name
> http://example.com
> 123234
>
> Foo Bar
> http://dlang.org
> 888888
>
> with blocks separated by varying amount of blank lines.
>
> -----
> import std.stdio;
>
> void main(string[] args){
> auto range = File("text.txt").byLine();
>
> foreach( line; range ){
> if (line != ""){
> writeln(line);
> // char[] url = range.???
> // char[] num = range.???
> }
> }
> }
> -----
> How can you read the next line while iterating over a file line
> by line, so that the next iteration uses the line after next?
> If this isn't possible byLine is a design flaw and D should
> instead provide a regular readLine function.
>
> btw: What is this? A forum for a programming language that
> doesn't support code blocks?
If you understand the underlying range interface, the answer
becomes clear:
import std.stdio;
void main(string[] args)
{
auto range = File("text.txt").byLineCopy();
foreach (line; range)
{
if (line != "")
{
writeln(line);
range.popFront;
char[] url = range.front();
range.popFront;
char[] num = range.front();
}
}
}
More information about the Digitalmars-d-learn
mailing list