Skip to content

Commit

Permalink
Update
Browse files Browse the repository at this point in the history
  • Loading branch information
lzcapp committed Jun 18, 2024
1 parent 8aa6e61 commit 56e015f
Show file tree
Hide file tree
Showing 10 changed files with 429 additions and 55 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ publish/
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
#*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
Expand Down
14 changes: 7 additions & 7 deletions AirCodes.sln
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.10.34928.147
VisualStudioVersion = 17.10.35004.147
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AirCodes", "AirCodes\AirCodes.csproj", "{27708178-B3EF-4C72-8A91-1AFD685974D3}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AirCodes", "AirCodes\AirCodes.csproj", "{737B4836-1644-4B83-AF78-6F2658FCF427}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{27708178-B3EF-4C72-8A91-1AFD685974D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{27708178-B3EF-4C72-8A91-1AFD685974D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{27708178-B3EF-4C72-8A91-1AFD685974D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{27708178-B3EF-4C72-8A91-1AFD685974D3}.Release|Any CPU.Build.0 = Release|Any CPU
{737B4836-1644-4B83-AF78-6F2658FCF427}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{737B4836-1644-4B83-AF78-6F2658FCF427}.Debug|Any CPU.Build.0 = Debug|Any CPU
{737B4836-1644-4B83-AF78-6F2658FCF427}.Release|Any CPU.ActiveCfg = Release|Any CPU
{737B4836-1644-4B83-AF78-6F2658FCF427}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {CD12A9D9-192C-4B4E-90DC-E9CBC62E89B9}
SolutionGuid = {FC54F6F8-948F-410D-AF88-43A318ACEFE2}
EndGlobalSection
EndGlobal
49 changes: 42 additions & 7 deletions AirCodes/AirCodes.csproj
Original file line number Diff line number Diff line change
@@ -1,20 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<StartupObject>AirCodes.Program</StartupObject>
<PublishAot>False</PublishAot>
<InvariantGlobalization>true</InvariantGlobalization>
<ApplicationIcon>favicon.ico</ApplicationIcon>
<PackageProjectUrl>https://github.com/lzcapp/AirCodes</PackageProjectUrl>
<PackageIcon>favicon.ico</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/lzcapp/AirCodes</RepositoryUrl>
<AssemblyVersion>2024.06.18</AssemblyVersion>
<FileVersion>2024.06.18</FileVersion>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebugType>none</DebugType>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DebugType>embedded</DebugType>
</PropertyGroup>

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DebugType>none</DebugType>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DebugType>embedded</DebugType>
</PropertyGroup>

<ItemGroup>
Expand All @@ -27,16 +37,41 @@
</ItemGroup>

<ItemGroup>
<EmbeddedResource Include="Resources\airlines.csv" />
<EmbeddedResource Include="Resources\airports.csv" />
</ItemGroup>

<ItemGroup>
<EmbeddedResource Include="Resources\airlines.csv" />
</ItemGroup>

<ItemGroup>
<None Include="..\favicon.ico">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
<None Include="..\README.md">
<Pack>True</Pack>
<PackagePath>\</PackagePath>
</None>
</ItemGroup>

<ItemGroup>
<PackageReference Include="CsvHelper" Version="33.0.0" />
</ItemGroup>

<ItemGroup>
<Folder Include="Properties\" />
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>

<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>

</Project>
111 changes: 71 additions & 40 deletions AirCodes/Program.cs
Original file line number Diff line number Diff line change
@@ -1,27 +1,34 @@
using System.Diagnostics;
using System.Formats.Asn1;
using System.Globalization;
using System.Reflection;
using System.Text.RegularExpressions;
using CsvHelper;
using CsvHelper.Configuration;

namespace AirCodes {
internal abstract class Program {
private static void Main() {
namespace AirCodes
{
internal abstract class Program
{
private static void Main()
{
string code;

var airlines = LoadAirlines();
var airports = LoadAirports();

do {
do
{
Console.ForegroundColor = ConsoleColor.White;
Console.Write(">> ");
code = Console.ReadLine() ?? string.Empty;
if (code.Equals("exit", StringComparison.OrdinalIgnoreCase) || code.Equals("quit", StringComparison.OrdinalIgnoreCase)) {
if (code.Equals("exit", StringComparison.OrdinalIgnoreCase) || code.Equals("quit", StringComparison.OrdinalIgnoreCase))
{
continue;
}

if (code.Equals("clear", StringComparison.OrdinalIgnoreCase) || code.Equals("cls", StringComparison.OrdinalIgnoreCase)) {
if (code.Equals("clear", StringComparison.OrdinalIgnoreCase) || code.Equals("cls", StringComparison.OrdinalIgnoreCase))
{
Console.Clear();
continue;
}
Expand All @@ -32,18 +39,21 @@ private static void Main() {
var resultAirlines = new List<Airlines>();
var resultAirports = new List<Airports>();

if (!string.IsNullOrWhiteSpace(code) && !"Airport".ToUpperInvariant().Contains(code.ToUpperInvariant()) && !"Intl".ToUpperInvariant().Contains(code.ToUpperInvariant())) {
if (!string.IsNullOrWhiteSpace(code) && !"Airport".ToUpperInvariant().Contains(code.ToUpperInvariant()) && !"Intl".ToUpperInvariant().Contains(code.ToUpperInvariant()))
{
resultAirlines = GetAirlines(airlines, code);
resultAirports = GetAirports(airports, code);
}

stopwatch.Stop();

if (resultAirlines.Count > 0) {
if (resultAirlines.Count > 0)
{
Console.WriteLine();
Console.WriteLine(resultAirlines.Count == 1 ? "1 Airline: " : resultAirlines.Count + " Airlines: ");

foreach (Airlines t in resultAirlines) {
foreach (Airlines t in resultAirlines)
{
Console.WriteLine();

Console.ForegroundColor = ConsoleColor.White;
Expand Down Expand Up @@ -82,11 +92,13 @@ private static void Main() {
}
}

if (resultAirports.Count > 0) {
if (resultAirports.Count > 0)
{
Console.WriteLine();
Console.WriteLine(resultAirports.Count == 1 ? "1 Airport: " : resultAirports.Count + " Airports: ");

foreach (Airports t in resultAirports) {
foreach (Airports t in resultAirports)
{
Console.WriteLine();

Console.ForegroundColor = ConsoleColor.White;
Expand Down Expand Up @@ -121,7 +133,8 @@ private static void Main() {
}
}

if (resultAirlines.Count > 0 || resultAirports.Count > 0) {
if (resultAirlines.Count > 0 || resultAirports.Count > 0)
{
var elapsed = stopwatch.ElapsedMilliseconds;
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.WriteLine();
Expand All @@ -133,7 +146,8 @@ private static void Main() {
Console.ResetColor();
}

if (resultAirlines.Count == 0 && resultAirports.Count == 0) {
if (resultAirlines.Count == 0 && resultAirports.Count == 0)
{
Console.ForegroundColor = ConsoleColor.DarkGray;
Console.WriteLine();
Console.WriteLine("NO RESULT");
Expand All @@ -144,11 +158,13 @@ private static void Main() {
} while (!code.Equals("exit", StringComparison.OrdinalIgnoreCase));
}

private static List<Airports> LoadAirports() {
private static List<Airports> LoadAirports()
{
var assembly = Assembly.GetExecutingAssembly();
var resourceName = assembly.GetName().Name + ".Resources.airports.csv";
using Stream? stream = assembly.GetManifestResourceStream(resourceName);
if (stream != null) {
if (stream != null)
{
using var reader = new StreamReader(stream);
using var csvReader = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture));
var records = csvReader.GetRecords<Airports>().ToList();
Expand All @@ -157,11 +173,13 @@ private static List<Airports> LoadAirports() {
return new List<Airports>();
}

private static List<Airlines> LoadAirlines() {
private static List<Airlines> LoadAirlines()
{
var assembly = Assembly.GetExecutingAssembly();
var resourceName = assembly.GetName().Name + ".Resources.airlines.csv";
using Stream? stream = assembly.GetManifestResourceStream(resourceName);
if (stream != null) {
if (stream != null)
{
using var reader = new StreamReader(stream);
using var csvReader = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture));
var records = csvReader.GetRecords<Airlines>().ToList();
Expand All @@ -170,62 +188,75 @@ private static List<Airlines> LoadAirlines() {
return new List<Airlines>();
}

private static List<Airlines> GetAirlines(List<Airlines> airlines, string code) {
private static List<Airlines> GetAirlines(List<Airlines> airlines, string code)
{
var result = new List<Airlines>();
foreach (Airlines airline in airlines) {
foreach (Airlines airline in airlines)
{
var pattern = @"\b" + code + @"\b";
MatchCollection matches = Regex.Matches(airline.Airline, pattern, RegexOptions.IgnoreCase);
if (matches.Count > 0) {
if (matches.Count > 0)
{
result.Add(airline);
}
MatchCollection matchesCountry = Regex.Matches(airline.Country, pattern, RegexOptions.IgnoreCase);
if (matchesCountry.Count > 0) {
if (matchesCountry.Count > 0)
{
result.Add(airline);
}
if (airline.IATA.Equals(code, StringComparison.OrdinalIgnoreCase) || airline.ICAO.Equals(code, StringComparison.OrdinalIgnoreCase) || airline.Callsign.Equals(code, StringComparison.OrdinalIgnoreCase)) {
if (airline.IATA.Equals(code, StringComparison.OrdinalIgnoreCase) || airline.ICAO.Equals(code, StringComparison.OrdinalIgnoreCase) || airline.Callsign.Equals(code, StringComparison.OrdinalIgnoreCase))
{
result.Add(airline);
}
}
return result.Distinct().ToList();
}

private static List<Airports> GetAirports(List<Airports> airports, string code) {
private static List<Airports> GetAirports(List<Airports> airports, string code)
{
var result = new List<Airports>();
foreach (Airports airport in airports) {
foreach (Airports airport in airports)
{
var pattern = @"\b" + code + @"\b";
MatchCollection matchesAirport = Regex.Matches(airport.Airport, pattern, RegexOptions.IgnoreCase);
if (matchesAirport.Count > 0) {
if (matchesAirport.Count > 0)
{
result.Add(airport);
}
MatchCollection matchesLocation = Regex.Matches(airport.Location, pattern, RegexOptions.IgnoreCase);
if (matchesLocation.Count > 0) {
if (matchesLocation.Count > 0)
{
result.Add(airport);
}
MatchCollection matchesCountry = Regex.Matches(airport.Country, pattern, RegexOptions.IgnoreCase);
if (matchesCountry.Count > 0) {
if (matchesCountry.Count > 0)
{
result.Add(airport);
}
if (airport.IATA.Equals(code, StringComparison.OrdinalIgnoreCase) || airport.ICAO.Equals(code, StringComparison.OrdinalIgnoreCase)) {
if (airport.IATA.Equals(code, StringComparison.OrdinalIgnoreCase) || airport.ICAO.Equals(code, StringComparison.OrdinalIgnoreCase))
{
result.Add(airport);
}
}
return result.Distinct().ToList();
}
}

internal class Airlines {
public string IATA { get; }
public string ICAO { get; }
public string Airline { get; }
public string Callsign { get; }
public string Country { get; }
internal class Airlines
{
public string IATA { get; set; }
public string ICAO { get; set; }
public string Airline { get; set; }
public string Callsign { get; set; }
public string Country { get; set; }
}

internal class Airports {
public string IATA { get; }
public string ICAO { get; }
public string Location { get; }
public string Airport { get; }
public string Country { get; }
internal class Airports
{
public string IATA { get; set; }
public string ICAO { get; set; }
public string Location { get; set; }
public string Airport { get; set; }
public string Country { get; set; }
}
}
19 changes: 19 additions & 0 deletions AirCodes/Properties/PublishProfiles/x64-runtime.pubxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishDir>bin\Publish\AirCodes-x64-runtime</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<_TargetId>Folder</_TargetId>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>true</SelfContained>
<PublishSingleFile>true</PublishSingleFile>
<PublishReadyToRun>false</PublishReadyToRun>
<PublishTrimmed>true</PublishTrimmed>
</PropertyGroup>
</Project>
18 changes: 18 additions & 0 deletions AirCodes/Properties/PublishProfiles/x64.pubxml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<Configuration>Release</Configuration>
<Platform>Any CPU</Platform>
<PublishDir>bin\Publish\AirCodes_x64</PublishDir>
<PublishProtocol>FileSystem</PublishProtocol>
<_TargetId>Folder</_TargetId>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>false</SelfContained>
<PublishSingleFile>true</PublishSingleFile>
<PublishReadyToRun>false</PublishReadyToRun>
</PropertyGroup>
</Project>
Loading

0 comments on commit 56e015f

Please sign in to comment.