Difference between revisions of "W2653 CSV File Processing"
From Coder Merlin
Jeff-strong (talk | contribs) m (Editorial review and minor corrections) |
|||
(6 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
== Introduction == | |||
This tutorial provides an introduction to processing CSV (comma separated values) files. | |||
= | |||
This tutorial | |||
== Research == | == Research == | ||
Line 12: | Line 10: | ||
== Experiment == | == Experiment == | ||
Create a new directory in your ~/ | Create a new directory in your ~/Experiences folder named "W2653"; then download the file [[Media:Example-metars.csv|Example-metars.csv]] to that directory. | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
cd ~/ | cd ~/Experiences | ||
mkdir | mkdir W2653 | ||
cd | cd W2653 | ||
wget https:// | wget https://codermerlin.academy/wiki/images/1/15/Example-metars.csv | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 25: | Line 23: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Carefully observe the file. | Carefully observe the file. Remember that the "\" character as the ''last'' character in a line in emacs is a '''line-continuation''' character. (For reference, you can read [https://www.gnu.org/software/emacs/manual/html_node/emacs/Continuation-Lines.html Continuation-Lines].) You'll probably find it much easier to read most lines if you maximize the width of your window. | ||
Questions: | Questions: | ||
Line 34: | Line 32: | ||
# How are '''fields''' delimited? | # How are '''fields''' delimited? | ||
Create a new file in the current directory, "main.swift". | Create a new file in the current directory, "main.swift". Remember to set up your project with "swift-init". Add additional files as necessary for each class. | ||
== Exercises == | == Exercises == | ||
# Design a class that will contain each field in a metar as a separate property. | # Design a class that will contain each field in a metar as a separate property. Pay close attention to the type of each field. | ||
# Create an initializer that accepts a series of ''fields'' of the expected type | # Create an initializer that accepts a series of ''fields'' of the expected type. | ||
# Create a convenience initializer that accepts a series of strings, one for each field | # Create a convenience initializer that accepts a series of strings, one for each field. | ||
# Create a convenience initializer that accepts a single string, in a format identical to that in the sample file | # Create a convenience initializer that accepts a single string, in a format identical to that in the sample file. | ||
# Support the CustomStringConvertible protocol, providing a ''reasonable'' description of the data encapsulated in the class. | # Support the CustomStringConvertible protocol, providing a ''reasonable'' description of the data encapsulated in the class. | ||
Hints: | Hints: | ||
* In some cases you | * In some cases you could opt to use more than one property for a single field in the file or vice versa. | ||
* Think carefully about whether | * Think carefully about whether a property should be optional. | ||
* This code snippet | * This code snippet might be helpful [[Code_Snippet:_Splitting_Key-Value_Pairs_into_Components]] | ||
Latest revision as of 16:21, 2 May 2023
Within these castle walls be forged Mavens of Computer Science ...
— Merlin, The Coder
Introduction[edit]
This tutorial provides an introduction to processing CSV (comma separated values) files.
Research[edit]
- Read CSV Files (Creativyst)
- Read ICAO Airport Codes (Wikipedia)
- Read Aviation Weather Center Mission (US Government)
- Read Metar Overview (Wikipedia)
- Read Initialization (Swift Documentation) - Read only the section on convenience initializers
Experiment[edit]
Create a new directory in your ~/Experiences folder named "W2653"; then download the file Example-metars.csv to that directory.
cd ~/Experiences
mkdir W2653
cd W2653
wget https://codermerlin.academy/wiki/images/1/15/Example-metars.csv
View the file in emacs:
emacs Example-metars.csv
Carefully observe the file. Remember that the "\" character as the last character in a line in emacs is a line-continuation character. (For reference, you can read Continuation-Lines.) You'll probably find it much easier to read most lines if you maximize the width of your window.
Questions:
- On which line does the actual data begin?
- How could you programmatically make this determination?
- What is the purpose of the immediately preceding line?
- How are records delimited?
- How are fields delimited?
Create a new file in the current directory, "main.swift". Remember to set up your project with "swift-init". Add additional files as necessary for each class.
Exercises[edit]
- Design a class that will contain each field in a metar as a separate property. Pay close attention to the type of each field.
- Create an initializer that accepts a series of fields of the expected type.
- Create a convenience initializer that accepts a series of strings, one for each field.
- Create a convenience initializer that accepts a single string, in a format identical to that in the sample file.
- Support the CustomStringConvertible protocol, providing a reasonable description of the data encapsulated in the class.
Hints:
- In some cases you could opt to use more than one property for a single field in the file or vice versa.
- Think carefully about whether a property should be optional.
- This code snippet might be helpful Code_Snippet:_Splitting_Key-Value_Pairs_into_Components