using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace crusherScanner
{
///
/// File access for ML jobs using CSV parse.
///
internal class FileAccess
{
public static HashSet GetOreDefData(HashSet samples,string barcode)
{
string[] DataDirs = new string[2] { Properties.Settings.Default.OreDefWorkFile, Properties.Settings.Default.OreDefInFile };
try
{
foreach (var DataDir in DataDirs)
{
if (Directory.Exists(DataDir))
{
// Pattern match is for 'ML003092.csv' or 'ML003092_20220822.csv'
var jobFiles = Directory.EnumerateFiles(DataDir, "ML??????*.csv", SearchOption.TopDirectoryOnly);
foreach (var jobFile in jobFiles)
{
bool sampleFound;
(samples, sampleFound) = ReadCSV(barcode, jobFile, samples);
if (sampleFound)
{
return samples;
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show("An error occurred." + Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return samples;
}
private static (HashSet,bool) ReadCSV(string barcode, string CsvFile, HashSet samples)
{
bool BarcodeFound = false;
string[] RawSampleData = new string[1] { "" };
string[] lines = File.ReadAllLines(CsvFile);
foreach (var line in lines)
{
if (line.Contains('\u002C'))
{
RawSampleData = line.Split('\u002C');
}
if (RawSampleData.Length == 9)
{
Samples sample = new();
if (RawSampleData[0] == barcode)
{
BarcodeFound = true;
}
if (RawSampleData[0] != "SAMPLEID")
{
sample.Sid = RawSampleData[0];
sample.Job = RawSampleData[1];
if (RawSampleData[2] == "PYRITE")
{
sample.Pyrite = true;
}
if (RawSampleData[3] == "PLASTIC")
{
sample.Plastic = true;
}
if (RawSampleData[4] == "MANGANESE")
{
sample.Manganese = true;
}
if (RawSampleData[5] == "HAMMEROIL")
{
sample.HammerOil = true;
}
samples.Add(sample);
}
}
}
return (samples,BarcodeFound);
}
}
}