Main foreach loop fails when another foreach is added
ikelaiah
iwan.kelaiah at gmail.com
Mon Aug 8 02:11:57 UTC 2022
Hi,
I'm writing a program that reads a text file and launch my work
URLs in it.
It worked fine, and very happy.
Then I added another `foreach` loop to count total number of
lines.
After this, the main `foreach` won't work.
Does anyone know as to why this happens?
I might have missed something very obvious.
Thank you.
Regards,
ikel
```d
module openurls;
import std.stdio : writeln, File, KeepTerminator;
import std.file;
import std.range;
import std.ascii;
import std.getopt : getopt, GetoptResult, defaultGetoptPrinter;
import std.process : browse;
import core.thread.osthread;
import core.time;
void main(string[] args)
{
string input_filename = "";
// Get command line option
GetoptResult user_args = getopt(args,
"input|i", "A list of URLs separated by new lines.",
&input_filename);
// Does user need help?
if (user_args.helpWanted)
{
defaultGetoptPrinter("Command line options for Open
URLs.",
user_args.options);
}
// Is input file specified?
if (input_filename.length == 0)
{
writeln("Open URL: No file specified.\n");
defaultGetoptPrinter("Command line option for Open URLs.",
user_args.options);
return;
}
// Does the file exist?
if (!input_filename.exists)
{
writeln("Open URL: input file --" ~ input_filename ~ "--
does not exist.\n");
return;
}
else
{
writeln("Open URL: reading --" ~ input_filename ~ "--");
}
// Open input file for reading
size_t line_count = 0;
File input_file = File(input_filename);
auto file_range = input_file.byLine(KeepTerminator.no,
std.ascii.newline);
// if this foreach not commented out
// the last foreach won't run.
foreach (char[] line; file_range)
{
line_count += 1;
}
// the MAIN foreach loop
// -- won't run if above foreach is enabled
foreach (char[] line; file_range)
{
if (!line.empty)
{
writeln("Open URL: " ~ line);
Thread.sleep(dur!("seconds")(2));
browse(line);
}
}
writeln("Open URL: completed");
writeln("Closing " ~ input_filename);
input_file.close();
}
```
More information about the Digitalmars-d-learn
mailing list