www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - std.algorithm

reply flamencofantasy <flamencofantasy gmail.com> writes:
Hello,

I have the following csv text;

auto input = "Start Date,End Date,Subject,All day 
event,Categories,Show time as
1/1/2018,1/1/2018,New Year's Day,TRUE,Holiday,3
1/15/2018,1/15/2018,\"Martin Luther King, Jr. Day\",TRUE,Holiday,3
2/19/2018,2/19/2018,President's Day,TRUE,Holiday,3
5/28/2018,5/28/2018,Memorial Day,TRUE,Holiday,3
7/4/2018,7/4/2018,Independence Day,TRUE,Holiday,3
9/3/2018,9/3/2018,Labor Day,TRUE,Holiday,3
11/22/2018,11/22/2018,Thanksgiving Day,TRUE,Holiday,3
11/23/2018,11/23/2018,Day after Thanksgiving,TRUE,Holiday,3
12/24/2018,12/24/2018,Christmas Eve,TRUE,Holiday,3
12/25/2018,12/25/2018,Christmas Day,TRUE,Holiday,3";

What is the most clean compact efficient/lazy way to produce a 
range that removes the first line and then retains the second and 
third columns of the following lines, basically producing this;


"1/1/2018,New Year's Day
1/15/2018,\"Martin Luther King, Jr. Day\"
2/19/2018,President's Day
5/28/2018,Memorial Day
7/4/2018,Independence Day
9/3/2018,Labor Day,TRUE
11/22/2018,Thanksgiving Day
11/23/2018,Day after Thanksgiving
12/24/2018,Christmas Eve
12/25/2018,Christmas Day"

Thanks a bunch
Nov 30 2017
parent reply Meta <jared771 gmail.com> writes:
On Thursday, 30 November 2017 at 20:49:36 UTC, flamencofantasy 
wrote:
 Hello,

 I have the following csv text;

 auto input = "Start Date,End Date,Subject,All day 
 event,Categories,Show time as
 1/1/2018,1/1/2018,New Year's Day,TRUE,Holiday,3
 1/15/2018,1/15/2018,\"Martin Luther King, Jr. 
 Day\",TRUE,Holiday,3
 2/19/2018,2/19/2018,President's Day,TRUE,Holiday,3
 5/28/2018,5/28/2018,Memorial Day,TRUE,Holiday,3
 7/4/2018,7/4/2018,Independence Day,TRUE,Holiday,3
 9/3/2018,9/3/2018,Labor Day,TRUE,Holiday,3
 11/22/2018,11/22/2018,Thanksgiving Day,TRUE,Holiday,3
 11/23/2018,11/23/2018,Day after Thanksgiving,TRUE,Holiday,3
 12/24/2018,12/24/2018,Christmas Eve,TRUE,Holiday,3
 12/25/2018,12/25/2018,Christmas Day,TRUE,Holiday,3";

 What is the most clean compact efficient/lazy way to produce a 
 range that removes the first line and then retains the second 
 and third columns of the following lines, basically producing 
 this;


 "1/1/2018,New Year's Day
 1/15/2018,\"Martin Luther King, Jr. Day\"
 2/19/2018,President's Day
 5/28/2018,Memorial Day
 7/4/2018,Independence Day
 9/3/2018,Labor Day,TRUE
 11/22/2018,Thanksgiving Day
 11/23/2018,Day after Thanksgiving
 12/24/2018,Christmas Eve
 12/25/2018,Christmas Day"

 Thanks a bunch
This *almost* works: import std.algorithm; import std.range; import std.stdio; import std.string; void main() { auto input = "Start Date,End Date,Subject,All day event,Categories,Show time as 1/1/2018,1/1/2018,New Year's Day,TRUE,Holiday,3 1/15/2018,1/15/2018,\"Martin Luther King, Jr. Day\",TRUE,Holiday,3 2/19/2018,2/19/2018,President's Day,TRUE,Holiday,3 5/28/2018,5/28/2018,Memorial Day,TRUE,Holiday,3 7/4/2018,7/4/2018,Independence Day,TRUE,Holiday,3 9/3/2018,9/3/2018,Labor Day,TRUE,Holiday,3 11/22/2018,11/22/2018,Thanksgiving Day,TRUE,Holiday,3 11/23/2018,11/23/2018,Day after Thanksgiving,TRUE,Holiday,3 12/24/2018,12/24/2018,Christmas Eve,TRUE,Holiday,3 12/25/2018,12/25/2018,Christmas Day,TRUE,Holiday,3"; input.lineSplitter() .dropOne() .map!(l => l.splitter(',') .dropOne() .take(2) .joiner(",")) .each!writeln(); } The only problem is the comma in Martin Luther King, Jr. Day, so that line comes out as `1/15/2018,"Martin Luther King`.
Nov 30 2017
parent flamencofantasy <flamencofantasy gmail.com> writes:
On Thursday, 30 November 2017 at 21:49:56 UTC, Meta wrote:
 On Thursday, 30 November 2017 at 20:49:36 UTC, flamencofantasy 
 wrote:
 [...]
This *almost* works: [...]
That's what I needed, thanks!
Nov 30 2017