How to do it...

  1. Create a Rust project to work on during this chapter with cargo new chapter_four.
  2. Navigate into the newly-created chapter_four folder. For the rest of this chapter, we will assume that your command line is currently in this directory.
  3. Inside the src folder, create a new folder called bin.
  4. Delete the generated lib.rs file, as we are not creating a library.
  5. Open the Cargo.toml file that was generated earlier for you.

  6. Under [dependencies], add the following line:
 csv = "1.0.0-beta.5"
  1. If you want, you can go to csv's crates.io page (https://crates.io/crates/csv) to check for the newest version and use that one instead.
  2. In the src/bin folder, create a file called csv.rs
  3. Add the following code and run it with cargo run --bin csv:
1    extern crate csv;
2
3 use std::io::{BufReader, BufWriter, Read, Seek, SeekFrom,
Write};
4 use std::fs::OpenOptions;
5
6 fn main() {
7 let file = OpenOptions::new()
8 .read(true)
9 .write(true)
10 .create(true)
11 .open("solar_system_compared_to_earth.csv")
12 .expect("failed to create csv file");
13
14 let buf_writer = BufWriter::new(&file);
15 write_records(buf_writer).expect("Failed to write csv");
16
17 let mut buf_reader = BufReader::new(&file);
18 buf_reader
19 .seek(SeekFrom::Start(0))
20 .expect("Failed to jump to the beginning of the csv");
21 read_records(buf_reader).expect("Failed to read csv");
22 }
23
24 fn write_records<W>(writer: W) -> csv::Result<()>
25 where
26 W: Write,
27 {
28 let mut wtr = csv::Writer::from_writer(writer);
29
30 // The header is just a normal record
31 wtr.write_record(&["name", "radius", "distance_from_sun",
32 "gravity"])?;
33
34 wtr.write_record(&["Mercury", "0.38", "0.47", "0.38"])?;
35 wtr.write_record(&["Venus", "0.95", "0.73", "0.9"])?;
36 wtr.write_record(&["Earth", "1", "1", "1"])?;
37 wtr.write_record(&["Mars", "0.53", "1.67", "0.38"])?;
38 wtr.write_record(&["Jupiter", "11.21", "5.46", "2.53"])?;
39 wtr.write_record(&["Saturn", "9.45", "10.12", "1.07"])?;
40 wtr.write_record(&["Uranus", "4.01", "20.11", "0.89"])?;
41 wtr.write_record(&["Neptune", "3.88", "30.33", "1.14"])?;
42 wtr.flush()?;
43 Ok(())
44 }
45
46 fn read_records<R>(reader: R) -> csv::Result<()>
47 where
48 R: Read,
49 {
50 let mut rdr = csv::Reader::from_reader(reader);
51 println!("Comparing planets in the solar system with the
52 earth");
53 println!("where a value of '1' means 'equal to earth'");
54 for result in rdr.records() {
55 println!("-------");
56 let record = result?;
57 if let Some(name) = record.get(0) {
58 println!("Name: {}", name);
59 }
60 if let Some(radius) = record.get(1) {
61 println!("Radius: {}", radius);
62 }
63 if let Some(distance) = record.get(2) {
64 println!("Distance from sun: {}", distance);
65 }
66 if let Some(gravity) = record.get(3) {
67 println!("Surface gravity: {}", gravity);
68 }
69 }
70 Ok(())
71 }
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.219.249.210