diff --git a/SabreTools.Library/DatFiles/EverdriveSmdb.cs b/SabreTools.Library/DatFiles/EverdriveSmdb.cs
index 07a0f0e9..52ef8556 100644
--- a/SabreTools.Library/DatFiles/EverdriveSmdb.cs
+++ b/SabreTools.Library/DatFiles/EverdriveSmdb.cs
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Text;
using SabreTools.Library.Data;
@@ -33,17 +32,20 @@ namespace SabreTools.Library.DatFiles
/// True if the error that is thrown should be thrown back to the caller, false otherwise
protected override void ParseFile(string filename, int indexId, bool keep, bool throwOnError = false)
{
- // TODO: Use SeparatedValueReader
// Open a file reader
Encoding enc = FileExtensions.GetEncoding(filename);
- StreamReader sr = new StreamReader(FileExtensions.TryOpenRead(filename), enc);
+ SeparatedValueReader svr = new SeparatedValueReader(FileExtensions.TryOpenRead(filename), enc)
+ {
+ Header = false,
+ Quotes = false,
+ Separator = '\t',
+ VerifyFieldCount = false,
+ };
- while (!sr.EndOfStream)
+ while (!svr.EndOfStream)
{
try
{
- string line = sr.ReadLine();
-
/*
The gameinfo order is as follows
0 - SHA-256
@@ -52,18 +54,17 @@ namespace SabreTools.Library.DatFiles
3 - MD5
4 - CRC32
*/
-
- string[] gameinfo = line.Split('\t');
- string[] fullname = gameinfo[1].Split('/');
+
+ string[] fullname = svr.Line[1].Split('/');
Rom rom = new Rom
{
- Name = gameinfo[1].Substring(fullname[0].Length + 1),
+ Name = svr.Line[1].Substring(fullname[0].Length + 1),
Size = null, // No size provided, but we don't want the size being 0
- CRC = gameinfo[4],
- MD5 = gameinfo[3],
- SHA1 = gameinfo[2],
- SHA256 = gameinfo[0],
+ CRC = svr.Line[4],
+ MD5 = svr.Line[3],
+ SHA1 = svr.Line[2],
+ SHA256 = svr.Line[0],
ItemStatus = ItemStatus.None,
Machine = new Machine
@@ -84,17 +85,17 @@ namespace SabreTools.Library.DatFiles
}
catch (Exception ex)
{
- string message = $"'{filename}' - There was an error parsing at position {sr.BaseStream.Position}";
+ string message = $"'{filename}' - There was an error parsing line {svr.LineNumber} '{svr.CurrentLine}'";
Globals.Logger.Error(ex, message);
if (throwOnError)
{
- sr.Dispose();
+ svr.Dispose();
throw new Exception(message, ex);
}
}
}
- sr.Dispose();
+ svr.Dispose();
}
///
diff --git a/SabreTools.Library/DatFiles/SeparatedValue.cs b/SabreTools.Library/DatFiles/SeparatedValue.cs
index 8c9c2794..390ad102 100644
--- a/SabreTools.Library/DatFiles/SeparatedValue.cs
+++ b/SabreTools.Library/DatFiles/SeparatedValue.cs
@@ -45,7 +45,7 @@ namespace SabreTools.Library.DatFiles
Header = true,
Quotes = true,
Separator = _delim,
- VerifyFieldCount = true
+ VerifyFieldCount = true,
};
// If we're somehow at the end of the stream already, we can't do anything
@@ -62,8 +62,33 @@ namespace SabreTools.Library.DatFiles
{
// Get the current line, split and parse
svr.ReadNextLine();
+
+ // Create mapping dictionary
+ var mappings = new Dictionary();
+
+ // Now we loop through and get values for everything
+ for (int i = 0; i < svr.HeaderValues.Count; i++)
+ {
+ Field key = svr.HeaderValues[i].AsField();
+ string value = svr.Line[i];
+ mappings[key] = value;
+ }
+
+ // Set DatHeader fields
+ DatHeader header = new DatHeader();
+ header.SetFields(mappings);
+ Header.ConditionalCopy(header);
+
+ // Set Machine and DatItem fields
+ if (mappings.ContainsKey(Field.DatItem_Type))
+ {
+ DatItem datItem = DatItem.Create(mappings[Field.DatItem_Type].AsItemType());
+ datItem.SetFields(mappings);
+ datItem.Source = new Source(indexId, filename);
+ ParseAddHelper(datItem);
+ }
}
- catch (InvalidDataException ex)
+ catch (Exception ex)
{
string message = $"'{filename}' - There was an error parsing line {svr.LineNumber} '{svr.CurrentLine}'";
Globals.Logger.Error(ex, message);
@@ -72,33 +97,6 @@ namespace SabreTools.Library.DatFiles
svr.Dispose();
throw new Exception(message, ex);
}
-
- continue;
- }
-
- // Create mapping dictionary
- var mappings = new Dictionary();
-
- // Now we loop through and get values for everything
- for (int i = 0; i < svr.HeaderValues.Count; i++)
- {
- Field key = svr.HeaderValues[i].AsField();
- string value = svr.Line[i];
- mappings[key] = value;
- }
-
- // Set DatHeader fields
- DatHeader header = new DatHeader();
- header.SetFields(mappings);
- Header.ConditionalCopy(header);
-
- // Set Machine and DatItem fields
- if (mappings.ContainsKey(Field.DatItem_Type))
- {
- DatItem datItem = DatItem.Create(mappings[Field.DatItem_Type].AsItemType());
- datItem.SetFields(mappings);
- datItem.Source = new Source(indexId, filename);
- ParseAddHelper(datItem);
}
}