From 9bd4e4c6e2f7563049705ecd8f3854ae8865770c Mon Sep 17 00:00:00 2001 From: jbtule Date: Fri, 24 Mar 2017 14:24:08 -0500 Subject: [PATCH 01/10] Update to VS2017 --- .hgignore | 17 - .hgtags | 8 - .nuget/NuGet.Config | 6 - .nuget/NuGet.targets | 139 -- .nuget/nuget.exe | Bin 619520 -> 0 bytes .../DotNetDBF.Enumerable.csproj | 115 +- DotNetDBF.Enumerable/packages.config | 4 - DotNetDBF.Test/DotNetDBF.Test.csproj | 63 + .../Properties/AssemblyInfo.cs | 71 +- .../Test.cs | 1141 +++++++++-------- DotNetDBF.Test/packages.config | 4 + DotNetDBF.sln | 23 +- DotNetDBF/DotNetDBF.csproj | 137 +- DotNetDBF/Properties/AssemblyInfo.cs | 36 - DotNetDBF/Properties/MoreAssemblyInfo.cs | 3 + DotNetDBF/app.config | 3 - DotNetDBFTest/DotNetDBFTest.csproj | 112 -- DotNetDBFTest/Properties/AssemblyInfo.cs | 32 - .../original java source/JavaDBFTest.java | 160 --- DotNetDBFTest/packages.config | 4 - nuget/dotnetdbf.enumerable.nuspec | 24 - nuget/dotnetdbf.nuspec | 22 - tools/NuGet.exe | Bin 288768 -> 0 bytes 23 files changed, 735 insertions(+), 1389 deletions(-) delete mode 100644 .hgignore delete mode 100644 .hgtags delete mode 100644 .nuget/NuGet.Config delete mode 100644 .nuget/NuGet.targets delete mode 100644 .nuget/nuget.exe delete mode 100644 DotNetDBF.Enumerable/packages.config create mode 100644 DotNetDBF.Test/DotNetDBF.Test.csproj rename {DotNetDBF.Enumerable => DotNetDBF.Test}/Properties/AssemblyInfo.cs (70%) rename DotNetDBFTest/DotNetDBFTest.cs => DotNetDBF.Test/Test.cs (84%) create mode 100644 DotNetDBF.Test/packages.config delete mode 100644 DotNetDBF/Properties/AssemblyInfo.cs create mode 100644 DotNetDBF/Properties/MoreAssemblyInfo.cs delete mode 100644 DotNetDBF/app.config delete mode 100644 DotNetDBFTest/DotNetDBFTest.csproj delete mode 100644 DotNetDBFTest/Properties/AssemblyInfo.cs delete mode 100644 DotNetDBFTest/original java source/JavaDBFTest.java delete mode 100644 DotNetDBFTest/packages.config delete mode 100644 nuget/dotnetdbf.enumerable.nuspec delete mode 100644 nuget/dotnetdbf.nuspec delete mode 100644 tools/NuGet.exe diff --git a/.hgignore b/.hgignore deleted file mode 100644 index 6479977..0000000 --- a/.hgignore +++ /dev/null @@ -1,17 +0,0 @@ -relre:^_ReSharper.* -relre:.*obj/.* -relre:.*bin/.* -relre:.*\.user$ -relre:^_UpgradeReport_Files.* -relre:.*\.suo$ -glob:UpgradeLog.XML -glob:*.vs10x -glob:nuget/dotnetdbf/lib/Net20/* -glob:nuget/dotnetdbf/lib/Net40/* -glob:nuget/NuGet.exe -glob:nuget/*.nupkg -glob:dist/* -glob:nuget/dotnetdbf.enumerable/lib/Net40/* -syntax: glob -packages/* -*.swp diff --git a/.hgtags b/.hgtags deleted file mode 100644 index 7afc3b2..0000000 --- a/.hgtags +++ /dev/null @@ -1,8 +0,0 @@ -43c37dd96ef92f9e03897f7d11e917bf9e6fe7f0 1_0_0 -85feb1f9254f8f3ef63cd5fac2fc696e8a53a598 1_0_1 -2921ee3800fa3fb192d17af659c49c2fc865f1d0 1_0_2 -6615b74c5f7845f7e7a8dd1574943d9b52f8ccc7 3_0_1 -55b6c37a1cbfdbf501f4b1cc8c52dcf5dca4d2e2 3_0_2 -55b6c37a1cbfdbf501f4b1cc8c52dcf5dca4d2e2 3_0_3 -b3a4bcdb9953b1d5dadfc46ca78d11b5307ba00c 3.0.4 -aeb9a414d6e18aa032bb887b07814a00a89bba14 3.1.0/4.1.0 diff --git a/.nuget/NuGet.Config b/.nuget/NuGet.Config deleted file mode 100644 index 6a318ad..0000000 --- a/.nuget/NuGet.Config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.nuget/NuGet.targets b/.nuget/NuGet.targets deleted file mode 100644 index 8ff52be..0000000 --- a/.nuget/NuGet.targets +++ /dev/null @@ -1,139 +0,0 @@ - - - - $(MSBuildProjectDirectory)\..\ - - - false - - - false - - - false - - - - - - - - - - $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) - $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) - $([System.IO.Path]::Combine($(SolutionDir), "packages")) - - - - - $(SolutionDir).nuget - packages.config - $(SolutionDir)packages - - - - - $(NuGetToolsPath)\nuget.exe - @(PackageSource) - - "$(NuGetExePath)" - mono --runtime=v4.0.30319 $(NuGetExePath) - - $(TargetDir.Trim('\\')) - - - $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)" - $(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols - - - - RestorePackages; - $(BuildDependsOn); - - - - - $(BuildDependsOn); - BuildPackage; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.nuget/nuget.exe b/.nuget/nuget.exe deleted file mode 100644 index e313ff95895210928076bb3b8368ad0aa5afe850..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 619520 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 )-^u}05Xl`mfW)==ck=BVbU^9u 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 z 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 diff --git a/DotNetDBF.Enumerable/DotNetDBF.Enumerable.csproj b/DotNetDBF.Enumerable/DotNetDBF.Enumerable.csproj index 051a42d..faca43e 100644 --- a/DotNetDBF.Enumerable/DotNetDBF.Enumerable.csproj +++ b/DotNetDBF.Enumerable/DotNetDBF.Enumerable.csproj @@ -1,101 +1,34 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {3BB97ECD-325D-4288-B355-57CFC1404019} - Library - Properties - DotNetDBF.Enumerable - DotNetDBF.Enumerable - v4.0 - 512 - - - 3.5 - - - ..\ - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\DotNetDBF.Enumerable.XML - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - bin\Release\DotNetDBF.Enumerable.XML - - - OnOutputUpdated - - - true - + + net40 + True sn.snk + dotnetdbf.enumerable + Jay Tuley + Ekon Benefits + For dotnetdbf projects using .net 4.0 projects this is an enumeration framework in which makes it easy to use Linq to Objects. + http://www.gnu.org/licenses/lgpl.html + http://code.google.com/p/dotnetdbf/ + clipper xbase dbf linq + https://github.com/ekonbenefits/dotnetdbf + https://github.com/ekonbenefits/dotnetdbf.git + gits + True + True + 4.3.11.0 + 4.3.11.0 + 4.3.11.0 + True + True - - False - ..\packages\ImpromptuInterface.6.1.3\lib\net40\ImpromptuInterface.dll - - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - - + - - {C5E9AE18-1EA3-4C90-AFAB-5323093BE4AC} - DotNetDBF - + - - Properties\dotnetdbf.enumerable.nuspec - Designer - - - + - - - "$(SolutionDir)tools\nuget.exe" pack "$(SolutionDir)nuget\dotnetdbf.enumerable.nuspec" - - - + \ No newline at end of file diff --git a/DotNetDBF.Enumerable/packages.config b/DotNetDBF.Enumerable/packages.config deleted file mode 100644 index 6590825..0000000 --- a/DotNetDBF.Enumerable/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/DotNetDBF.Test/DotNetDBF.Test.csproj b/DotNetDBF.Test/DotNetDBF.Test.csproj new file mode 100644 index 0000000..5121a7c --- /dev/null +++ b/DotNetDBF.Test/DotNetDBF.Test.csproj @@ -0,0 +1,63 @@ + + + + + Debug + AnyCPU + {8D5436E3-F584-40A0-ACDC-65346ECEADB0} + Library + Properties + DotNetDBF.Test + DotNetDBF.Test + v4.5.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\NUnit.3.6.1\lib\net45\nunit.framework.dll + + + + + + + + + + + + + + + + + + + + {3bb97ecd-325d-4288-b355-57cfc1404019} + DotNetDBF.Enumerable + + + {c5e9ae18-1ea3-4c90-afab-5323093be4ac} + DotNetDBF + + + + \ No newline at end of file diff --git a/DotNetDBF.Enumerable/Properties/AssemblyInfo.cs b/DotNetDBF.Test/Properties/AssemblyInfo.cs similarity index 70% rename from DotNetDBF.Enumerable/Properties/AssemblyInfo.cs rename to DotNetDBF.Test/Properties/AssemblyInfo.cs index 0945c02..65cf496 100644 --- a/DotNetDBF.Enumerable/Properties/AssemblyInfo.cs +++ b/DotNetDBF.Test/Properties/AssemblyInfo.cs @@ -1,35 +1,36 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DotNetDBF.Enumerable")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Ekon Benefits")] -[assembly: AssemblyProduct("DotNetDBF.Enumerable")] -[assembly: AssemblyCopyright("Copyright © Ekon Benefits 2009-2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3d35d2d6-4eb6-4dc5-bc31-c8ada2f586a3")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("4.3.10.3")] +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DotNetDBF.Test")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DotNetDBF.Test")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8d5436e3-f584-40a0-acdc-65346eceadb0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/DotNetDBFTest/DotNetDBFTest.cs b/DotNetDBF.Test/Test.cs similarity index 84% rename from DotNetDBFTest/DotNetDBFTest.cs rename to DotNetDBF.Test/Test.cs index 4eb4d6a..e152926 100644 --- a/DotNetDBFTest/DotNetDBFTest.cs +++ b/DotNetDBF.Test/Test.cs @@ -1,569 +1,574 @@ -using System; -using System.IO; -using System.Linq; -using DotNetDBF; -using DotNetDBF.Enumerable; -using NUnit.Framework; - -namespace DotNetDBFTest -{ - public interface ITestInterface - { - string F1 - { - get; - set; - } - - string F2 - { - get; - set; - } - - string F3 - { - get; - set; - } - } - [TestFixture] - public class DotNetDBFTest: AssertionHelper - { - private string TestPath = Path.Combine(Path.GetTempPath(), "121212.dbf"); - - private string TestRAFPath = - Path.Combine(Path.GetTempPath(), "raf-1212.dbf"); - - - private string TestClipLongPath = Path.Combine(Path.GetTempPath(), "cliplong.dbf"); - - private string TestMemoPath = Path.Combine(Path.GetTempPath(), "clipmemo.dbf"); - - private string TestSelectPath = Path.Combine(Path.GetTempPath(), "select.dbf"); - - private string GetCharacters(int aLength) - { - var chars = new[]{"a","b","c","d","e","f","g"," "}; - var returnval = string.Join(string.Empty, - Enumerable.Range(0, aLength).Select(it => chars[it % chars.Length]).ToArray()); - Assert.That(returnval.Length, EqualTo(aLength), "GetCharacters() did not return correct length string"); - return returnval; - } - - - private static void println(String s) - { - Console.WriteLine(s); - } - - - [Test] - public void checkDataType_N() - { - Decimal writtenValue; - using ( - Stream fos = - File.Open(TestPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var writer = new DBFWriter(); - var field = new DBFField("F1", NativeDbType.Numeric, 15, 0); - writer.Fields = new[] { field }; - - writtenValue = 123456789012345L; - writer.AddRecord(writtenValue); - writer.Write(fos); - } - using ( - Stream fis = - File.Open(TestPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var reader = new DBFReader(fis); - - var readValues = reader.NextRecord(); - - Assert.That(readValues[0], EqualTo(writtenValue),"Written Value Equals Read"); - } - } - - - [Test] - public void checkLongCharLengthWithClipper() - { - var fieldLength = 750; - string writtenValue; - using ( - Stream fos = - File.Open(TestClipLongPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var writer = new DBFWriter(); - var field = new DBFField("F1", NativeDbType.Char, fieldLength); - writer.Fields = new[] { field }; - - writtenValue = GetCharacters(fieldLength); - writer.AddRecord(writtenValue); - writer.Write(fos); - } - using ( - Stream fis = - File.Open(TestClipLongPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var reader = new DBFReader(fis); - Assert.That(reader.Fields.First().FieldLength, EqualTo(fieldLength)); - var readValues = reader.NextRecord(); - - Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read"); - } - } - - - - [Test] - public void checkDataType_M() - { - var fieldLength = 2400; - MemoValue writtenValue; - using ( - Stream fos = - File.Open(TestMemoPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") - }; - var field = new DBFField("F1", NativeDbType.Memo); - writer.Fields = new[] { field }; - - writtenValue = new MemoValue(GetCharacters(fieldLength)); - writer.AddRecord(writtenValue); - writer.Write(fos); - } - using ( - Stream fis = - File.Open(TestMemoPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") - }; - var readValues = reader.NextRecord(); - - Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read"); - } - } - - [Test] - public void checkSelect() - { - var fieldLength = 2400; - string writtenValue; - using ( - Stream fos = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - var field = new DBFField("F1", NativeDbType.Memo); - var field2 = new DBFField("F2", NativeDbType.Numeric,10); - var field3 = new DBFField("F3", NativeDbType.Char,10); - writer.Fields = new[] { field , field2, field3}; - - writtenValue = "alpha"; - writer.AddRecord(new MemoValue(GetCharacters(fieldLength)),10,writtenValue); - writer.Write(fos); - } - using ( - Stream fis = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - reader.SetSelectFields("F3"); - var readValues = reader.NextRecord(); - - Assert.That(readValues[0], StartsWith(writtenValue), "Written Value not equaling Read"); - } - } - - [Test] - public void checkSelectDynamic() - { - var fieldLength = 2400; - string writtenValue; - string writtenMemo; - using ( - Stream fos = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - var field = new DBFField("F1", NativeDbType.Memo); - var field2 = new DBFField("F2", NativeDbType.Numeric, 10); - var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; - - writtenValue = "alpha"; - writtenMemo = GetCharacters(fieldLength); - writer.AddRecord(new MemoValue(writtenMemo), 10, writtenValue); - writer.Write(fos); - } - using ( - Stream fis = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - reader.SetSelectFields("F1","F3"); - var readValues = reader.DynamicAllRecords().First(); - - Assert.That(readValues.F1.ToString(), EqualTo(writtenMemo), "Written Value not equaling Read"); - Assert.That(readValues.F3, EqualTo(writtenValue), "Written Value not equaling Read"); - } - } - - [Test] - public void checkAnnoymous() - { - var fieldLength = 2400; - string writtenValue; - using ( - Stream fos = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - var field = new DBFField("F1", NativeDbType.Memo); - var field2 = new DBFField("F2", NativeDbType.Numeric, 10); - var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; - - writtenValue = "alpha"; - writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); - writer.Write(fos); - } - using ( - Stream fis = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - - var readValues = reader.AllRecords(new {F2 = default(decimal), F3 = default(string)}); - - Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read"); - } - } - - - - - [Test] - public void checkProxy() - { - var fieldLength = 2400; - string writtenValue; - using ( - Stream fos = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - var field = new DBFField("F1", NativeDbType.Memo); - var field2 = new DBFField("F2", NativeDbType.Numeric, 10); - var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; - - writtenValue = "alpha"; - writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); - writer.Write(fos); - } - using ( - Stream fis = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - - var readValues = reader.AllRecords (); - - Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read"); - } - } - - [Test] - public void checkDynamicProxy() - { - var fieldLength = 2400; - string writtenValue; - using ( - Stream fos = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - var field = new DBFField("F1", NativeDbType.Memo); - var field2 = new DBFField("F2", NativeDbType.Numeric, 10); - var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; - - writtenValue = "alpha"; - writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); - writer.Write(fos); - } - using ( - Stream fis = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - - var readValues = reader.DynamicAllRecords(); - - Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read"); - } - } - - - [Test] - public void checkDynamicProxyWhere() - { - var fieldLength = 2400; - string writtenValue; - using ( - Stream fos = - File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - var field = new DBFField("F1", NativeDbType.Memo); - var field2 = new DBFField("F2", NativeDbType.Numeric, 10); - var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; - - writtenValue = "alpha"; - writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); - - writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 12, "beta"); - - writer.Write(fos); - } - - using(var reader = new DBFReader(TestSelectPath){ - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT")}) - { - - var readValues = reader.DynamicAllRecords(); - - Assert.That(Equals(readValues.Count(), 2), "All Records not matching"); - - } - - using (var reader = new DBFReader(TestSelectPath) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT")}) - { - - var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 10); - - Assert.That(Equals(readValues.Count(), 1), "All Records not matching"); - - } - - using (var reader = new DBFReader(TestSelectPath) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT")}) - { - - var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 12); - - Assert.That(Equals(readValues.Count(), 1), "All Records not matching"); - - } - using (var reader = new DBFReader(TestSelectPath) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT")}) - { - - var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 13); - - Assert.That(Equals(readValues.Count(), 0), "All Records not matching"); - - } - - } - - [Test] - public void checkRAFwriting() - { - println("Writing in RAF mode ... "); - - if (File.Exists(TestRAFPath)) - { - File.Delete(TestRAFPath); - } - using (var writer = new DBFWriter(TestRAFPath)) - { - var fields = new DBFField[2]; - - fields[0] = new DBFField("F1", NativeDbType.Char, 10); - - fields[1] = new DBFField("F2", NativeDbType.Numeric, 2); - - writer.Fields = fields; - - - writer.WriteRecord("Red", 10); - writer.WriteRecord("Blue", 20); - } - - println("done."); - - println("Appending to this file"); - - using (var writer = new DBFWriter(TestRAFPath)) - { - writer.WriteRecord("Green", 33); - - writer.WriteRecord("Yellow", 44); - } - println("done."); - - - } - - [Test] - public void ShowPaths() - { - println(TestPath); - - println(TestRAFPath); - - println(TestClipLongPath); - } - - [Test] - public void Test() - { - using ( - Stream fis = - File.Open(@"f:\st\dev\testdata\p.dbf", - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(@"f:\st\dev\testdata\p.dbf", "DBT") - }; - var readValues = reader.NextRecord(); - - Console.WriteLine(readValues); - } - } - - - [Test] - public void test1() - { - - Assert.DoesNotThrow(() => { new DBFWriter(); }, "Can't Create empty DBFWriter Object"); - - } - - [Test] - public void test2() - { - Assert.DoesNotThrow(() => { new DBFField(); }, "Can't Create empty DBFWriter Object"); - } - - - [Test] - public void test3() - { - WriteSample(); - ReadSample(); - } - - public void WriteSample() - { - var field = new DBFField {Name = "F1", DataType = NativeDbType.Numeric}; - var writer = new DBFWriter {Fields = new[] {field}}; - writer.AddRecord(3); - using ( - Stream fos = - File.Open(TestPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) - { - writer.Write(fos); - } - - } - - - public void ReadSample() - { - using (var reader = new DBFReader(TestPath)) - { - Assert.That(reader.RecordCount, EqualTo(1)); - } - } - - - } +using System; +using System.IO; +using System.Linq; +using DotNetDBF; +using DotNetDBF.Enumerable; +using NUnit.Framework; + +namespace DotNetDBFTest +{ + public interface ITestInterface + { + string F1 + { + get; + set; + } + + string F2 + { + get; + set; + } + + string F3 + { + get; + set; + } + } + [TestFixture] + public class DotNetDBFTest : AssertionHelper + { + private string TestPath = Path.Combine(Path.GetTempPath(), "121212.dbf"); + + private string TestRAFPath = + Path.Combine(Path.GetTempPath(), "raf-1212.dbf"); + + + private string TestClipLongPath = Path.Combine(Path.GetTempPath(), "cliplong.dbf"); + + private string TestMemoPath = Path.Combine(Path.GetTempPath(), "clipmemo.dbf"); + + private string TestSelectPath = Path.Combine(Path.GetTempPath(), "select.dbf"); + + private string GetCharacters(int aLength) + { + var chars = new[] { "a", "b", "c", "d", "e", "f", "g", " " }; + var returnval = string.Join(string.Empty, + Enumerable.Range(0, aLength).Select(it => chars[it % chars.Length]).ToArray()); + Assert.That(returnval.Length, EqualTo(aLength), "GetCharacters() did not return correct length string"); + return returnval; + } + + + private static void println(String s) + { + Console.WriteLine(s); + } + + + [Test] + public void checkDataType_N() + { + Decimal writtenValue; + using ( + Stream fos = + File.Open(TestPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var writer = new DBFWriter(); + var field = new DBFField("F1", NativeDbType.Numeric, 15, 0); + writer.Fields = new[] { field }; + + writtenValue = 123456789012345L; + writer.AddRecord(writtenValue); + writer.Write(fos); + } + using ( + Stream fis = + File.Open(TestPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var reader = new DBFReader(fis); + + var readValues = reader.NextRecord(); + + Assert.That(readValues[0], EqualTo(writtenValue), "Written Value Equals Read"); + } + } + + + [Test] + public void checkLongCharLengthWithClipper() + { + var fieldLength = 750; + string writtenValue; + using ( + Stream fos = + File.Open(TestClipLongPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var writer = new DBFWriter(); + var field = new DBFField("F1", NativeDbType.Char, fieldLength); + writer.Fields = new[] { field }; + + writtenValue = GetCharacters(fieldLength); + writer.AddRecord(writtenValue); + writer.Write(fos); + } + using ( + Stream fis = + File.Open(TestClipLongPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var reader = new DBFReader(fis); + Assert.That(reader.Fields.First().FieldLength, EqualTo(fieldLength)); + var readValues = reader.NextRecord(); + + Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read"); + } + } + + + + [Test] + public void checkDataType_M() + { + var fieldLength = 2400; + MemoValue writtenValue; + using ( + Stream fos = + File.Open(TestMemoPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") + }; + var field = new DBFField("F1", NativeDbType.Memo); + writer.Fields = new[] { field }; + + writtenValue = new MemoValue(GetCharacters(fieldLength)); + writer.AddRecord(writtenValue); + writer.Write(fos); + } + using ( + Stream fis = + File.Open(TestMemoPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") + }; + var readValues = reader.NextRecord(); + + Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read"); + } + } + + [Test] + public void checkSelect() + { + var fieldLength = 2400; + string writtenValue; + using ( + Stream fos = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + var field = new DBFField("F1", NativeDbType.Memo); + var field2 = new DBFField("F2", NativeDbType.Numeric, 10); + var field3 = new DBFField("F3", NativeDbType.Char, 10); + writer.Fields = new[] { field, field2, field3 }; + + writtenValue = "alpha"; + writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); + writer.Write(fos); + } + using ( + Stream fis = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + reader.SetSelectFields("F3"); + var readValues = reader.NextRecord(); + + Assert.That(readValues[0], StartsWith(writtenValue), "Written Value not equaling Read"); + } + } + + [Test] + public void checkSelectDynamic() + { + var fieldLength = 2400; + string writtenValue; + string writtenMemo; + using ( + Stream fos = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + var field = new DBFField("F1", NativeDbType.Memo); + var field2 = new DBFField("F2", NativeDbType.Numeric, 10); + var field3 = new DBFField("F3", NativeDbType.Char, 10); + writer.Fields = new[] { field, field2, field3 }; + + writtenValue = "alpha"; + writtenMemo = GetCharacters(fieldLength); + writer.AddRecord(new MemoValue(writtenMemo), 10, writtenValue); + writer.Write(fos); + } + using ( + Stream fis = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + reader.SetSelectFields("F1", "F3"); + var readValues = reader.DynamicAllRecords().First(); + + Assert.That(readValues.F1.ToString(), EqualTo(writtenMemo), "Written Value not equaling Read"); + Assert.That(readValues.F3, EqualTo(writtenValue), "Written Value not equaling Read"); + } + } + + [Test] + public void checkAnnoymous() + { + var fieldLength = 2400; + string writtenValue; + using ( + Stream fos = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + var field = new DBFField("F1", NativeDbType.Memo); + var field2 = new DBFField("F2", NativeDbType.Numeric, 10); + var field3 = new DBFField("F3", NativeDbType.Char, 10); + writer.Fields = new[] { field, field2, field3 }; + + writtenValue = "alpha"; + writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); + writer.Write(fos); + } + using ( + Stream fis = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + + var readValues = reader.AllRecords(new { F2 = default(decimal), F3 = default(string) }); + + Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read"); + } + } + + + + + [Test] + public void checkProxy() + { + var fieldLength = 2400; + string writtenValue; + using ( + Stream fos = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + var field = new DBFField("F1", NativeDbType.Memo); + var field2 = new DBFField("F2", NativeDbType.Numeric, 10); + var field3 = new DBFField("F3", NativeDbType.Char, 10); + writer.Fields = new[] { field, field2, field3 }; + + writtenValue = "alpha"; + writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); + writer.Write(fos); + } + using ( + Stream fis = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + + var readValues = reader.AllRecords(); + + Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read"); + } + } + + [Test] + public void checkDynamicProxy() + { + var fieldLength = 2400; + string writtenValue; + using ( + Stream fos = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + var field = new DBFField("F1", NativeDbType.Memo); + var field2 = new DBFField("F2", NativeDbType.Numeric, 10); + var field3 = new DBFField("F3", NativeDbType.Char, 10); + writer.Fields = new[] { field, field2, field3 }; + + writtenValue = "alpha"; + writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); + writer.Write(fos); + } + using ( + Stream fis = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + + var readValues = reader.DynamicAllRecords(); + + Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read"); + } + } + + + [Test] + public void checkDynamicProxyWhere() + { + var fieldLength = 2400; + string writtenValue; + using ( + Stream fos = + File.Open(TestSelectPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; + var field = new DBFField("F1", NativeDbType.Memo); + var field2 = new DBFField("F2", NativeDbType.Numeric, 10); + var field3 = new DBFField("F3", NativeDbType.Char, 10); + writer.Fields = new[] { field, field2, field3 }; + + writtenValue = "alpha"; + writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); + + writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 12, "beta"); + + writer.Write(fos); + } + + using (var reader = new DBFReader(TestSelectPath) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }) + { + + var readValues = reader.DynamicAllRecords(); + + Assert.That(Equals(readValues.Count(), 2), "All Records not matching"); + + } + + using (var reader = new DBFReader(TestSelectPath) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }) + { + + var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 10); + + Assert.That(Equals(readValues.Count(), 1), "All Records not matching"); + + } + + using (var reader = new DBFReader(TestSelectPath) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }) + { + + var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 12); + + Assert.That(Equals(readValues.Count(), 1), "All Records not matching"); + + } + using (var reader = new DBFReader(TestSelectPath) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }) + { + + var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 13); + + Assert.That(Equals(readValues.Count(), 0), "All Records not matching"); + + } + + } + + [Test] + public void checkRAFwriting() + { + println("Writing in RAF mode ... "); + + if (File.Exists(TestRAFPath)) + { + File.Delete(TestRAFPath); + } + using (var writer = new DBFWriter(TestRAFPath)) + { + var fields = new DBFField[2]; + + fields[0] = new DBFField("F1", NativeDbType.Char, 10); + + fields[1] = new DBFField("F2", NativeDbType.Numeric, 2); + + writer.Fields = fields; + + + writer.WriteRecord("Red", 10); + writer.WriteRecord("Blue", 20); + } + + println("done."); + + println("Appending to this file"); + + using (var writer = new DBFWriter(TestRAFPath)) + { + writer.WriteRecord("Green", 33); + + writer.WriteRecord("Yellow", 44); + } + println("done."); + + + } + + [Test] + public void ShowPaths() + { + println(TestPath); + + println(TestRAFPath); + + println(TestClipLongPath); + } + + [Test] + public void Test() + { + using ( + Stream fis = + File.Open(@"f:\st\dev\testdata\p.dbf", + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(@"f:\st\dev\testdata\p.dbf", "DBT") + }; + var readValues = reader.NextRecord(); + + Console.WriteLine(readValues); + } + } + + + [Test] + public void test1() + { + + Assert.DoesNotThrow(() => { new DBFWriter(); }, "Can't Create empty DBFWriter Object"); + + } + + [Test] + public void test2() + { + Assert.DoesNotThrow(() => { new DBFField(); }, "Can't Create empty DBFWriter Object"); + } + + + [Test] + public void test3() + { + WriteSample(); + ReadSample(); + } + + public void WriteSample() + { + var field = new DBFField { Name = "F1", DataType = NativeDbType.Numeric }; + var writer = new DBFWriter { Fields = new[] { field } }; + writer.AddRecord(3); + using ( + Stream fos = + File.Open(TestPath, + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) + { + writer.Write(fos); + } + + } + + + public void ReadSample() + { + using (var reader = new DBFReader(TestPath)) + { + Assert.That(reader.RecordCount, EqualTo(1)); + } + } + + + } } \ No newline at end of file diff --git a/DotNetDBF.Test/packages.config b/DotNetDBF.Test/packages.config new file mode 100644 index 0000000..25833b9 --- /dev/null +++ b/DotNetDBF.Test/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/DotNetDBF.sln b/DotNetDBF.sln index 02b8fc2..791e4f3 100644 --- a/DotNetDBF.sln +++ b/DotNetDBF.sln @@ -1,17 +1,12 @@ -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26228.9 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetDBF", "DotNetDBF\DotNetDBF.csproj", "{C5E9AE18-1EA3-4C90-AFAB-5323093BE4AC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetDBFTest", "DotNetDBFTest\DotNetDBFTest.csproj", "{8BBBC83C-14CB-4836-8406-A046DB0C4F17}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetDBF.Enumerable", "DotNetDBF.Enumerable\DotNetDBF.Enumerable.csproj", "{3BB97ECD-325D-4288-B355-57CFC1404019}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{C6CAF2BC-3FE0-4C7A-B534-A1F938A548C9}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\nuget.exe = .nuget\nuget.exe - .nuget\NuGet.targets = .nuget\NuGet.targets - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetDBF.Test", "DotNetDBF.Test\DotNetDBF.Test.csproj", "{8D5436E3-F584-40A0-ACDC-65346ECEADB0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -23,14 +18,14 @@ Global {C5E9AE18-1EA3-4C90-AFAB-5323093BE4AC}.Debug|Any CPU.Build.0 = Debug|Any CPU {C5E9AE18-1EA3-4C90-AFAB-5323093BE4AC}.Release|Any CPU.ActiveCfg = Release|Any CPU {C5E9AE18-1EA3-4C90-AFAB-5323093BE4AC}.Release|Any CPU.Build.0 = Release|Any CPU - {8BBBC83C-14CB-4836-8406-A046DB0C4F17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BBBC83C-14CB-4836-8406-A046DB0C4F17}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BBBC83C-14CB-4836-8406-A046DB0C4F17}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BBBC83C-14CB-4836-8406-A046DB0C4F17}.Release|Any CPU.Build.0 = Release|Any CPU {3BB97ECD-325D-4288-B355-57CFC1404019}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3BB97ECD-325D-4288-B355-57CFC1404019}.Debug|Any CPU.Build.0 = Debug|Any CPU {3BB97ECD-325D-4288-B355-57CFC1404019}.Release|Any CPU.ActiveCfg = Release|Any CPU {3BB97ECD-325D-4288-B355-57CFC1404019}.Release|Any CPU.Build.0 = Release|Any CPU + {8D5436E3-F584-40A0-ACDC-65346ECEADB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D5436E3-F584-40A0-ACDC-65346ECEADB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D5436E3-F584-40A0-ACDC-65346ECEADB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D5436E3-F584-40A0-ACDC-65346ECEADB0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/DotNetDBF/DotNetDBF.csproj b/DotNetDBF/DotNetDBF.csproj index 6e6b550..ec87c66 100644 --- a/DotNetDBF/DotNetDBF.csproj +++ b/DotNetDBF/DotNetDBF.csproj @@ -1,120 +1,29 @@ - - - - true - full - false - .\bin\Debug\ - DEBUG;TRACE - - - - - false - true - .\bin\Release\ - TRACE - bin\Release\DotNetDBF.XML - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {C5E9AE18-1EA3-4C90-AFAB-5323093BE4AC} - Library - DotNetDBF - DotNetDBF - 4 - - - 3.5 - - - v3.5 - http://localhost/DotNetDBF/ - true - Web - true - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - true - false - true - - - OnOutputUpdated - - - true - + + net35 + True sn.snk + 3.1.11 + 3.1.11.0 + 3.1.11.0 + Ekon Benefits + Copyright 2009-2017 + This is a basic file parser for reading and writing xBase DBF files particularlly Clipper. Code originally derived from javadbf. + https://github.com/ekonbenefits/dotnetdbf + clipper xbase dbf + http://www.gnu.org/licenses/lgpl.html + Anil Kumar, Jay Tuley + True + True + https://github.com/ekonbenefits/dotnetdbf.git + git + True + True - - - 3.5 - - - + + + - - - - - - - - - - - - - - - - False - .NET Framework Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - true - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - false - - - - - Properties\dotnetdbf.nuspec - Designer - - - - - - - "$(SolutionDir)tools\nuget.exe" pack "$(SolutionDir)nuget\dotnetdbf.nuspec" - + \ No newline at end of file diff --git a/DotNetDBF/Properties/AssemblyInfo.cs b/DotNetDBF/Properties/AssemblyInfo.cs deleted file mode 100644 index 0e815c5..0000000 --- a/DotNetDBF/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly : AssemblyTitle("DotNetDBF")] -[assembly : AssemblyDescription("")] -[assembly : AssemblyConfiguration("")] -[assembly : AssemblyCompany("Ekon Benefits")] -[assembly : AssemblyProduct("DotNetDBF")] -[assembly : AssemblyCopyright("Copyright © 2009-2013")] -[assembly : AssemblyTrademark("")] -[assembly : AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. - -[assembly : ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM - -[assembly : Guid("950dfc0d-63ac-43fc-8e58-77a7d9cca63a")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: InternalsVisibleTo("DotNetDBF.Enumerable,PublicKey=00240000048000009400000006020000002400005253413100040000010001008713EA5197F8878AF1E1CDEF220E2D0A898944AD1643B851775EB8624697A183FBCD2ED8C1A58CE185B657D6381419AFF8B0DE8F8934F2B7E5DC7C19C11DE8D146B113F6794BF604BD2A11334DCF1022A485DD7A6E6BED8873D26363E9692136598B7750AD633747922657FF215347614DE2FDFA7866843F2924C9E5DB2545E1")] -[assembly: AssemblyVersion("3.1.10.0")] \ No newline at end of file diff --git a/DotNetDBF/Properties/MoreAssemblyInfo.cs b/DotNetDBF/Properties/MoreAssemblyInfo.cs new file mode 100644 index 0000000..e644cef --- /dev/null +++ b/DotNetDBF/Properties/MoreAssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("DotNetDBF.Enumerable,PublicKey=00240000048000009400000006020000002400005253413100040000010001008713EA5197F8878AF1E1CDEF220E2D0A898944AD1643B851775EB8624697A183FBCD2ED8C1A58CE185B657D6381419AFF8B0DE8F8934F2B7E5DC7C19C11DE8D146B113F6794BF604BD2A11334DCF1022A485DD7A6E6BED8873D26363E9692136598B7750AD633747922657FF215347614DE2FDFA7866843F2924C9E5DB2545E1")] \ No newline at end of file diff --git a/DotNetDBF/app.config b/DotNetDBF/app.config deleted file mode 100644 index 73859b0..0000000 --- a/DotNetDBF/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/DotNetDBFTest/DotNetDBFTest.csproj b/DotNetDBFTest/DotNetDBFTest.csproj deleted file mode 100644 index 34d13c1..0000000 --- a/DotNetDBFTest/DotNetDBFTest.csproj +++ /dev/null @@ -1,112 +0,0 @@ - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - false - - - false - true - bin\Release\ - TRACE - false - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {8BBBC83C-14CB-4836-8406-A046DB0C4F17} - Library - DotNetDBFTest - DotNetDBFTest - 4 - - - - 3.5 - - - http://localhost/DotNetDBFTest/ - true - Web - true - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - true - false - true - v4.0 - - ..\ - true - - - - - ..\packages\NUnit.2.6.2\lib\nunit.framework.dll - - - - 3.5 - - - - - - - {3BB97ECD-325D-4288-B355-57CFC1404019} - DotNetDBF.Enumerable - - - {C5E9AE18-1EA3-4C90-AFAB-5323093BE4AC} - DotNetDBF - - - - - False - .NET Framework Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - true - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - false - - - False - .NET Framework 3.5 SP1 - false - - - - - - - - - - - - \ No newline at end of file diff --git a/DotNetDBFTest/Properties/AssemblyInfo.cs b/DotNetDBFTest/Properties/AssemblyInfo.cs deleted file mode 100644 index f09b721..0000000 --- a/DotNetDBFTest/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DotNetDBFTest")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("DotNetDBFTest")] -[assembly: AssemblyCopyright("Copyright © 2009")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("d970c801-3241-4abd-b25d-cce14b93d542")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.*")] diff --git a/DotNetDBFTest/original java source/JavaDBFTest.java b/DotNetDBFTest/original java source/JavaDBFTest.java deleted file mode 100644 index c1e7bb0..0000000 --- a/DotNetDBFTest/original java source/JavaDBFTest.java +++ /dev/null @@ -1,160 +0,0 @@ -import java.io.*; -import junit.framework.*; -import junit.framework.Test.*; -import com.linuxense.javadbf.*; - -public class JavaDBFTest extends TestCase { - - public JavaDBFTest( String s) { - - super( s); - } - - private void print( String s) { - - System.out.print( s); - } - - private void println( String s) { - - System.out.println( s); - } - - public void test1() throws Exception { - - print( "Creating an empty DBFWriter object... "); - DBFWriter writer = new DBFWriter(); - println( "OK."); - } - - public void test2() throws Exception { - print( "Creating an empty DBFField object... "); - DBFField field = new DBFField(); - println( "OK."); - } - - public void test3() throws Exception { - - print( "Writing a sample DBF file ... "); - DBFField field = new DBFField(); - field.setName( "F1"); - field.setDataType( DBFField.FIELD_TYPE_N); - DBFWriter writer = new DBFWriter(); - writer.setFields( new DBFField[] { field}); - writer.addRecord( new Object[] {new Double( 3)}); - FileOutputStream fos = new FileOutputStream( "/tmp/121212.dbf"); - writer.write( fos); - fos.flush(); - fos.close(); - println( "OK."); - } - - public void test4() throws Exception { - - print( "Reading the written file ..."); - FileInputStream fis = new FileInputStream( "/tmp/121212.dbf"); - DBFReader reader = new DBFReader( fis); - print( "\tRecord count=" + reader.getRecordCount()); - fis.close(); - println( " OK."); - } - - public void checkDataType_N() throws Exception { - - FileOutputStream fos = new FileOutputStream( "/tmp/121212.dbf"); - DBFWriter writer = new DBFWriter(); - DBFField field = new DBFField(); - field.setName( "F1"); - field.setDataType( DBFField.FIELD_TYPE_N); - field.setFieldLength( 15); - field.setDecimalCount( 0); - - writer.setFields( new DBFField[] { field}); - Double value = new Double( 123456789012345L); - writer.addRecord( new Object[] { value}); - print( " written=" + value); - writer.write( fos); - fos.close(); - - FileInputStream fis = new FileInputStream( "/tmp/121212.dbf"); - DBFReader reader = new DBFReader( fis); - - Object[] values = reader.nextRecord(); - print( " read=" + (Double)values[0]); - println( " written == read (" + (((Double)values[0]).equals( value)) + ")"); - fis.close(); - } - - public void checkRAFwriting() throws Exception { - - print( "Writing in RAF mode ... "); - File file = new File( "/tmp/raf-1212.dbf"); - if( file.exists()) { - - file.delete(); - } - DBFWriter writer = new DBFWriter( file); - - DBFField []fields = new DBFField[2]; - - fields[0] = new DBFField(); - fields[0].setName( "F1"); - fields[0].setDataType( DBFField.FIELD_TYPE_C); - fields[0].setFieldLength( 10); - - fields[1] = new DBFField(); - fields[1].setName( "F2"); - fields[1].setDataType( DBFField.FIELD_TYPE_N); - fields[1].setFieldLength( 2); - - writer.setFields( fields); - - Object []record = new Object[2]; - record[0] = "Red"; - record[1] = new Double( 10); - - writer.addRecord( record); - - record = new Object[2]; - record[0] = "Blue"; - record[1] = new Double( 20); - - writer.addRecord( record); - - writer.write(); - println( "done."); - - print( "Appending to this file"); - - writer = new DBFWriter( file); - - record = new Object[2]; - record[0] = "Green"; - record[1] = new Double( 33); - - writer.addRecord( record); - - record = new Object[2]; - record[0] = "Yellow"; - record[1] = new Double( 44); - - writer.addRecord( record); - - writer.write(); - println( "done."); - - } - - public static Test suite() { - - TestSuite s = new TestSuite(); - s.addTest( new JavaDBFTest( "test1")); - s.addTest( new JavaDBFTest( "test2")); - s.addTest( new JavaDBFTest( "test3")); - s.addTest( new JavaDBFTest( "test4")); - s.addTest( new JavaDBFTest( "checkDataType_N")); - s.addTest( new JavaDBFTest( "checkRAFwriting")); - - return s; - } -} diff --git a/DotNetDBFTest/packages.config b/DotNetDBFTest/packages.config deleted file mode 100644 index 5c3ca54..0000000 --- a/DotNetDBFTest/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/nuget/dotnetdbf.enumerable.nuspec b/nuget/dotnetdbf.enumerable.nuspec deleted file mode 100644 index aee9e6f..0000000 --- a/nuget/dotnetdbf.enumerable.nuspec +++ /dev/null @@ -1,24 +0,0 @@ - - - - dotnetdbf.enumerable - 4.3.10.4 - Jay Tuley - Jay Tuley - For dotnetdbf projects using .net 4.0 projects this is an enumeration framework in which makes it easy to use Linq to Objects. - http://code.google.com/p/dotnetdbf/ - http://www.gnu.org/licenses/lgpl.html - clipper dbf .net40 - en-US - - - - - - - - - - - - diff --git a/nuget/dotnetdbf.nuspec b/nuget/dotnetdbf.nuspec deleted file mode 100644 index 5abe98c..0000000 --- a/nuget/dotnetdbf.nuspec +++ /dev/null @@ -1,22 +0,0 @@ - - - - dotnetdbf - 3.1.10 - Anil Kumar, Jay Tuley - Jay Tuley - This is a basic file parser for reading and writing xBase DBF files, particularly Clipper. - This is a basic file parser for reading and writing xBase DBF files particularlly Clipper. Code derived from javadbf. - http://code.google.com/p/dotnetdbf/ - http://www.gnu.org/licenses/lgpl.html - clipper dbf .net35 - en-US - - - - - - - - - diff --git a/tools/NuGet.exe b/tools/NuGet.exe deleted file mode 100644 index 048a043b0e424ade93c090f7e3689ed50bce52fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 288768 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 Date: Fri, 24 Mar 2017 14:25:25 -0500 Subject: [PATCH 02/10] refactor: sorted modifiers --- DotNetDBF/DBFBase.cs | 2 +- DotNetDBF/DBFField.cs | 2 +- DotNetDBF/DBFFieldType.cs | 6 +++--- DotNetDBF/DBFHeader.cs | 2 +- DotNetDBF/Utils.cs | 18 +++++++++--------- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/DotNetDBF/DBFBase.cs b/DotNetDBF/DBFBase.cs index e6765f0..9648441 100644 --- a/DotNetDBF/DBFBase.cs +++ b/DotNetDBF/DBFBase.cs @@ -19,7 +19,7 @@ suggested by Nick Voznesensky namespace DotNetDBF { - abstract public class DBFBase + public abstract class DBFBase { protected Encoding _charEncoding = Encoding.GetEncoding("utf-8"); protected int _blockSize = 512; diff --git a/DotNetDBF/DBFField.cs b/DotNetDBF/DBFField.cs index 54c1777..95657cf 100644 --- a/DotNetDBF/DBFField.cs +++ b/DotNetDBF/DBFField.cs @@ -304,7 +304,7 @@ @return Returns the created DBFField object. @throws IOException If any stream reading problems occures. */ - static internal DBFField CreateField(BinaryReader aReader) + internal static DBFField CreateField(BinaryReader aReader) { DBFField field = new DBFField(); if (field.Read(aReader)) diff --git a/DotNetDBF/DBFFieldType.cs b/DotNetDBF/DBFFieldType.cs index 1796c2d..9715359 100644 --- a/DotNetDBF/DBFFieldType.cs +++ b/DotNetDBF/DBFFieldType.cs @@ -31,7 +31,7 @@ public enum NativeDbType :byte Double = (byte) 0x4F, //O in ASCII } - static public class DBFFieldType + public static class DBFFieldType { public const byte EndOfData = 0x1A; //^Z End of File public const byte EndOfField = 0x0D; //End of Field @@ -40,7 +40,7 @@ static public class DBFFieldType public const byte True = 0x54; //T in ascii public const byte UnknownByte = 0x3F; //Unknown Bool value public const string Unknown = "?"; //Unknown value - static public DbType FromNative(NativeDbType aByte) + public static DbType FromNative(NativeDbType aByte) { switch (aByte) { @@ -62,7 +62,7 @@ static public DbType FromNative(NativeDbType aByte) } } - static public NativeDbType FromDbType(DbType dbType) + public static NativeDbType FromDbType(DbType dbType) { switch (dbType) { diff --git a/DotNetDBF/DBFHeader.cs b/DotNetDBF/DBFHeader.cs index 4332ca9..90a7d52 100644 --- a/DotNetDBF/DBFHeader.cs +++ b/DotNetDBF/DBFHeader.cs @@ -21,7 +21,7 @@ original author (javadbf): anil@linuxense.com 2004/03/31 namespace DotNetDBF { - static public class DBFSigniture + public static class DBFSigniture { public const byte NotSet = 0, WithMemo = 0x80, diff --git a/DotNetDBF/Utils.cs b/DotNetDBF/Utils.cs index dd3670c..236f59f 100644 --- a/DotNetDBF/Utils.cs +++ b/DotNetDBF/Utils.cs @@ -21,13 +21,13 @@ original author (javadbf): anil@linuxense.com 2004/03/31 namespace DotNetDBF { - static public class Utils + public static class Utils { public const int ALIGN_LEFT = 10; public const int ALIGN_RIGHT = 12; - static public byte[] FillArray(byte[] anArray, byte value) + public static byte[] FillArray(byte[] anArray, byte value) { for (int i = 0; i < anArray.Length; i++) { @@ -36,7 +36,7 @@ static public byte[] FillArray(byte[] anArray, byte value) return anArray; } - static public byte[] trimLeftSpaces(byte[] arr) + public static byte[] trimLeftSpaces(byte[] arr) { List tList = new List(arr.Length); @@ -50,14 +50,14 @@ static public byte[] trimLeftSpaces(byte[] arr) return tList.ToArray(); } - static public byte[] textPadding(String text, + public static byte[] textPadding(String text, Encoding charEncoding, int length) { return textPadding(text, charEncoding, length, ALIGN_LEFT); } - static public byte[] textPadding(String text, + public static byte[] textPadding(String text, Encoding charEncoding, int length, int alignment) @@ -70,7 +70,7 @@ static public byte[] textPadding(String text, DBFFieldType.Space); } - static public byte[] textPadding(String text, + public static byte[] textPadding(String text, Encoding charEncoding, int length, int alignment, @@ -108,7 +108,7 @@ static public byte[] textPadding(String text, return byte_array; } - static public byte[] NumericFormating(IFormattable doubleNum, + public static byte[] NumericFormating(IFormattable doubleNum, Encoding charEncoding, int fieldLength, int sizeDecimalPart) @@ -145,7 +145,7 @@ static public byte[] NumericFormating(IFormattable doubleNum, ALIGN_RIGHT); } - static public bool contains(byte[] arr, byte value) + public static bool contains(byte[] arr, byte value) { return Array.Exists(arr, @@ -153,7 +153,7 @@ static public bool contains(byte[] arr, byte value) } - static public Type TypeForNativeDBType(NativeDbType aType) + public static Type TypeForNativeDBType(NativeDbType aType) { switch(aType) { From e5f60bbe280751f739bfc8a0886084b3e24bbff2 Mon Sep 17 00:00:00 2001 From: jbtule Date: Fri, 24 Mar 2017 14:27:58 -0500 Subject: [PATCH 03/10] refactor: more sort modifiers --- DotNetDBF.Enumerable/Enumerable.cs | 4 ++-- DotNetDBF.Enumerable/Obsolete.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DotNetDBF.Enumerable/Enumerable.cs b/DotNetDBF.Enumerable/Enumerable.cs index cb8a788..faa050e 100644 --- a/DotNetDBF.Enumerable/Enumerable.cs +++ b/DotNetDBF.Enumerable/Enumerable.cs @@ -155,7 +155,7 @@ public static void AddRecord(this DBFWriter writer, Enumerable.IDBFIntercepter v /// The reader. /// The prototype. Anonymous class instance /// - static public IEnumerable AllRecords(this DBFReader reader, T prototype =null) where T : class + public static IEnumerable AllRecords(this DBFReader reader, T prototype =null) where T : class { var tType = typeof(T); @@ -213,7 +213,7 @@ static public IEnumerable AllRecords(this DBFReader reader, T prototype =n /// The where column name. /// What the were column should equal. /// - static public IEnumerable DynamicAllRecords(this DBFReader reader, string whereColumn = null, dynamic whereColumnEquals = null) + public static IEnumerable DynamicAllRecords(this DBFReader reader, string whereColumn = null, dynamic whereColumnEquals = null) { var tProperties = reader.GetSelectFields().Select(it=>it.Name).ToArray(); diff --git a/DotNetDBF.Enumerable/Obsolete.cs b/DotNetDBF.Enumerable/Obsolete.cs index 49c1fa4..8a49f68 100644 --- a/DotNetDBF.Enumerable/Obsolete.cs +++ b/DotNetDBF.Enumerable/Obsolete.cs @@ -66,7 +66,7 @@ public static void AddRecord(DBFWriter writer, IDBFIntercepter value) /// The reader. /// The prototype. Anonymous class instance /// - static public IEnumerable AllRecords(DBFReader reader, T prototype = null) where T : class + public static IEnumerable AllRecords(DBFReader reader, T prototype = null) where T : class { return reader.AllRecords(prototype); From d8a96f35bf63545c591dcd51ff88780da2e4a00b Mon Sep 17 00:00:00 2001 From: jbtule Date: Fri, 24 Mar 2017 14:28:11 -0500 Subject: [PATCH 04/10] refactor: string interoplation --- DotNetDBF/DBFFieldType.cs | 4 ++-- DotNetDBF/MemoValue.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/DotNetDBF/DBFFieldType.cs b/DotNetDBF/DBFFieldType.cs index 9715359..c19021b 100644 --- a/DotNetDBF/DBFFieldType.cs +++ b/DotNetDBF/DBFFieldType.cs @@ -58,7 +58,7 @@ public static DbType FromNative(NativeDbType aByte) return DbType.AnsiString; default: throw new DBFException( - string.Format("Unsupported Native Type {0}", aByte)); + $"Unsupported Native Type {aByte}"); } } @@ -78,7 +78,7 @@ public static NativeDbType FromDbType(DbType dbType) return NativeDbType.Memo; default: throw new DBFException( - string.Format("Unsupported Type {0}", dbType)); + $"Unsupported Type {dbType}"); } } } diff --git a/DotNetDBF/MemoValue.cs b/DotNetDBF/MemoValue.cs index 54538eb..cba8c52 100644 --- a/DotNetDBF/MemoValue.cs +++ b/DotNetDBF/MemoValue.cs @@ -16,7 +16,7 @@ public class MemoValue public MemoValue(string aValue) { - _lockName = string.Format("DotNetDBF.Memo.new.{0}", Guid.NewGuid()); + _lockName = $"DotNetDBF.Memo.new.{Guid.NewGuid()}"; Value = aValue; } @@ -27,7 +27,7 @@ internal MemoValue(long block, DBFBase aBase, string fileLoc) _block = block; _base = aBase; _fileLoc = fileLoc; - _lockName = string.Format("DotNetDBF.Memo.read.{0}.{1}.", _fileLoc, _block); + _lockName = $"DotNetDBF.Memo.read.{_fileLoc}.{_block}."; } private readonly DBFBase _base; From 9be03b46d9faa0aedb82135db349993e8d5a6213 Mon Sep 17 00:00:00 2001 From: jbtule Date: Fri, 24 Mar 2017 14:30:39 -0500 Subject: [PATCH 05/10] refactor: prefer var (originally project was .net 2.0) --- DotNetDBF.Enumerable/Enumerable.cs | 4 ++-- DotNetDBF/DBFField.cs | 6 +++--- DotNetDBF/DBFHeader.cs | 12 +++++------ DotNetDBF/DBFReader.cs | 34 +++++++++++++++--------------- DotNetDBF/DBFWriter.cs | 22 +++++++++---------- DotNetDBF/Utils.cs | 20 +++++++++--------- 6 files changed, 49 insertions(+), 49 deletions(-) diff --git a/DotNetDBF.Enumerable/Enumerable.cs b/DotNetDBF.Enumerable/Enumerable.cs index faa050e..6591810 100644 --- a/DotNetDBF.Enumerable/Enumerable.cs +++ b/DotNetDBF.Enumerable/Enumerable.cs @@ -176,7 +176,7 @@ public static IEnumerable AllRecords(this DBFReader reader, T prototype =n if (tType.GetCustomAttributes(typeof(CompilerGeneratedAttribute), false).Any()) { - object[] tAnon = reader.NextRecord(tProps, tOrderedProps); + var tAnon = reader.NextRecord(tProps, tOrderedProps); while (tAnon != null) { @@ -227,7 +227,7 @@ public static IEnumerable DynamicAllRecords(this DBFReader reader, stri var tReturn = new List(); - object[] t = reader.NextRecord(); + var t = reader.NextRecord(); while (t != null) { diff --git a/DotNetDBF/DBFField.cs b/DotNetDBF/DBFField.cs index 95657cf..e44c3e5 100644 --- a/DotNetDBF/DBFField.cs +++ b/DotNetDBF/DBFField.cs @@ -231,7 +231,7 @@ @param Size of the decimal field. public bool Read(BinaryReader aReader) { - byte t_byte = aReader.ReadByte(); /* 0 */ + var t_byte = aReader.ReadByte(); /* 0 */ if (t_byte == DBFFieldType.EndOfField) { //System.out.println( "End of header found"); @@ -241,7 +241,7 @@ public bool Read(BinaryReader aReader) aReader.Read(fieldName, 1, 10); /* 1-10 */ fieldName[0] = t_byte; - for (int i = 0; i < fieldName.Length; i++) + for (var i = 0; i < fieldName.Length; i++) { if (fieldName[i] == 0) @@ -306,7 +306,7 @@ @throws IOException If any stream reading problems occures. internal static DBFField CreateField(BinaryReader aReader) { - DBFField field = new DBFField(); + var field = new DBFField(); if (field.Read(aReader)) { return field; diff --git a/DotNetDBF/DBFHeader.cs b/DotNetDBF/DBFHeader.cs index 90a7d52..4c961f7 100644 --- a/DotNetDBF/DBFHeader.cs +++ b/DotNetDBF/DBFHeader.cs @@ -103,8 +103,8 @@ internal short RecordSize { get { - int tRecordLength = 0; - for (int i = 0; i < _fieldArray.Length; i++) + var tRecordLength = 0; + for (var i = 0; i < _fieldArray.Length; i++) { tRecordLength += _fieldArray[i].FieldLength; } @@ -190,9 +190,9 @@ internal void Read(BinaryReader dataInput) reserv4 = dataInput.ReadInt16(); /* 30-31 */ - List v_fields = new List(); + var v_fields = new List(); - DBFField field = DBFField.CreateField(dataInput); /* 32 each */ + var field = DBFField.CreateField(dataInput); /* 32 each */ while (field != null) { v_fields.Add(field); @@ -206,7 +206,7 @@ internal void Read(BinaryReader dataInput) internal void Write(BinaryWriter dataOutput) { dataOutput.Write(_signature); /* 0 */ - DateTime tNow = DateTime.Now; + var tNow = DateTime.Now; _year = (byte) (tNow.Year - 1900); _month = (byte) (tNow.Month); _day = (byte) (tNow.Day); @@ -235,7 +235,7 @@ internal void Write(BinaryWriter dataOutput) dataOutput.Write(_languageDriver); /* 29 */ dataOutput.Write(reserv4); /* 30-31 */ - for (int i = 0; i < _fieldArray.Length; i++) + for (var i = 0; i < _fieldArray.Length; i++) { //System.out.println( "Length: " + _fieldArray[i].getFieldLength()); _fieldArray[i].Write(dataOutput); diff --git a/DotNetDBF/DBFReader.cs b/DotNetDBF/DBFReader.cs index 293bf86..e04f0fa 100644 --- a/DotNetDBF/DBFReader.cs +++ b/DotNetDBF/DBFReader.cs @@ -83,7 +83,7 @@ public DBFReader(string anIn) _header.Read(_dataInputStream); /* it might be required to leap to the start of records at times */ - int t_dataStartIndex = _header.HeaderLength + var t_dataStartIndex = _header.HeaderLength - (32 + (32 * _header.FieldArray.Length)) - 1; if (t_dataStartIndex > 0) @@ -107,7 +107,7 @@ public DBFReader(Stream anIn) _header.Read(_dataInputStream); /* it might be required to leap to the start of records at times */ - int t_dataStartIndex = _header.HeaderLength + var t_dataStartIndex = _header.HeaderLength - (32 + (32 * _header.FieldArray.Length)) - 1; if (t_dataStartIndex > 0) @@ -168,14 +168,14 @@ public string DataMemoLoc public override String ToString() { - StringBuilder sb = + var sb = new StringBuilder(_header.Year + "/" + _header.Month + "/" + _header.Day + "\n" + "Total records: " + _header.NumberOfRecords + "\nHeader length: " + _header.HeaderLength + ""); - for (int i = 0; i < _header.FieldArray.Length; i++) + for (var i = 0; i < _header.FieldArray.Length; i++) { sb.Append(_header.FieldArray[i].Name); sb.Append("\n"); @@ -207,13 +207,13 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn { throw new DBFException("Source is not open"); } - IList tOrderdSelectIndexes = sortedIndexes; + var tOrderdSelectIndexes = sortedIndexes; var recordObjects = new Object[_header.FieldArray.Length]; try { - bool isDeleted = false; + var isDeleted = false; do { if (isDeleted) @@ -230,9 +230,9 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn isDeleted = (t_byte == '*'); } while (isDeleted); - int j = 0; - int k = -1; - for (int i = 0; i < _header.FieldArray.Length; i++) + var j = 0; + var k = -1; + for (var i = 0; i < _header.FieldArray.Length; i++) { if (tOrderdSelectIndexes.Count == j && j != 0 @@ -260,17 +260,17 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn case NativeDbType.Date: - byte[] t_byte_year = new byte[4]; + var t_byte_year = new byte[4]; _dataInputStream.Read(t_byte_year, 0, t_byte_year.Length); - byte[] t_byte_month = new byte[2]; + var t_byte_month = new byte[2]; _dataInputStream.Read(t_byte_month, 0, t_byte_month.Length); - byte[] t_byte_day = new byte[2]; + var t_byte_day = new byte[2]; _dataInputStream.Read(t_byte_day, 0, t_byte_day.Length); @@ -308,11 +308,11 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn try { - byte[] t_float = new byte[ + var t_float = new byte[ _header.FieldArray[i].FieldLength ]; _dataInputStream.Read(t_float, 0, t_float.Length); - String tParsed = CharEncoding.GetString(t_float); + var tParsed = CharEncoding.GetString(t_float); var tLast = tParsed.Substring(tParsed.Length - 1); if (tParsed.Length > 0 && tLast != " " @@ -337,13 +337,13 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn try { - byte[] t_numeric = new byte[ + var t_numeric = new byte[ _header.FieldArray[i].FieldLength ]; _dataInputStream.Read(t_numeric, 0, t_numeric.Length); - string tParsed = + var tParsed = CharEncoding.GetString(t_numeric); var tLast = tParsed.Substring(tParsed.Length - 1); if (tParsed.Length > 0 @@ -367,7 +367,7 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn case NativeDbType.Logical: - byte t_logical = _dataInputStream.ReadByte(); + var t_logical = _dataInputStream.ReadByte(); //todo find out whats really valid if (t_logical == 'Y' || t_logical == 't' || t_logical == 'T' diff --git a/DotNetDBF/DBFWriter.cs b/DotNetDBF/DBFWriter.cs index 5158865..66c2c04 100644 --- a/DotNetDBF/DBFWriter.cs +++ b/DotNetDBF/DBFWriter.cs @@ -149,7 +149,7 @@ public DBFField[] Fields throw new DBFException("Should have at least one field"); } - for (int i = 0; i < value.Length; i++) + for (var i = 0; i < value.Length; i++) { if (value[i] == null) { @@ -233,7 +233,7 @@ private void AddRecord(Object[] values, bool writeImediately) "Invalid record. Invalid number of fields in row"); } - for (int i = 0; i < header.FieldArray.Length; i++) + for (var i = 0; i < header.FieldArray.Length; i++) { if (values[i] == null) { @@ -315,18 +315,18 @@ public void Write(Stream tOut) { try { - BinaryWriter outStream = new BinaryWriter(tOut); + var outStream = new BinaryWriter(tOut); header.NumberOfRecords = v_records.Count; header.Write(outStream); /* Now write all the records */ - int t_recCount = v_records.Count; - for (int i = 0; i < t_recCount; i++) + var t_recCount = v_records.Count; + for (var i = 0; i < t_recCount; i++) { /* iterate through records */ - Object[] t_values = (Object[]) v_records[i]; + var t_values = (Object[]) v_records[i]; WriteRecord(outStream, t_values); } @@ -357,7 +357,7 @@ public void Close() private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) { dataOutput.Write((byte) ' '); - for (int j = 0; j < header.FieldArray.Length; j++) + for (var j = 0; j < header.FieldArray.Length; j++) { /* iterate throught fields */ @@ -366,7 +366,7 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) case NativeDbType.Char: if (objectArray[j] != null && objectArray[j] != DBNull.Value) { - String str_value = objectArray[j].ToString(); + var str_value = objectArray[j].ToString(); dataOutput.Write( Utils.textPadding(str_value, CharEncoding, @@ -391,7 +391,7 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) case NativeDbType.Date: if (objectArray[j] != null && objectArray[j] != DBNull.Value) { - DateTime tDate = (DateTime) objectArray[j]; + var tDate = (DateTime) objectArray[j]; dataOutput.Write( CharEncoding.GetBytes(tDate.ToString("yyyyMMdd"))); @@ -408,7 +408,7 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) if (objectArray[j] != null && objectArray[j] != DBNull.Value) { - Double tDouble = Convert.ToDouble(objectArray[j]); + var tDouble = Convert.ToDouble(objectArray[j]); dataOutput.Write( Utils.NumericFormating( tDouble, @@ -436,7 +436,7 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) if (objectArray[j] != null && objectArray[j] != DBNull.Value) { - Decimal tDecimal = Convert.ToDecimal(objectArray[j]); + var tDecimal = Convert.ToDecimal(objectArray[j]); dataOutput.Write( Utils.NumericFormating( tDecimal, diff --git a/DotNetDBF/Utils.cs b/DotNetDBF/Utils.cs index 236f59f..4176931 100644 --- a/DotNetDBF/Utils.cs +++ b/DotNetDBF/Utils.cs @@ -29,7 +29,7 @@ public static class Utils public static byte[] FillArray(byte[] anArray, byte value) { - for (int i = 0; i < anArray.Length; i++) + for (var i = 0; i < anArray.Length; i++) { anArray[i] = value; } @@ -38,9 +38,9 @@ public static byte[] FillArray(byte[] anArray, byte value) public static byte[] trimLeftSpaces(byte[] arr) { - List tList = new List(arr.Length); + var tList = new List(arr.Length); - for (int i = 0; i < arr.Length; i++) + for (var i = 0; i < arr.Length; i++) { if (arr[i] != ' ') { @@ -76,14 +76,14 @@ public static byte[] textPadding(String text, int alignment, byte paddingByte) { - Encoding tEncoding = charEncoding; + var tEncoding = charEncoding; var inputBytes = tEncoding.GetBytes(text); if (inputBytes.Length >= length) { return inputBytes.Take(length).ToArray(); } - byte[] byte_array = FillArray(new byte[length], paddingByte); + var byte_array = FillArray(new byte[length], paddingByte); switch (alignment) { @@ -96,7 +96,7 @@ public static byte[] textPadding(String text, break; case ALIGN_RIGHT: - int t_offset = length - text.Length; + var t_offset = length - text.Length; Array.Copy(inputBytes, 0, byte_array, @@ -113,13 +113,13 @@ public static byte[] NumericFormating(IFormattable doubleNum, int fieldLength, int sizeDecimalPart) { - int sizeWholePart = fieldLength + var sizeWholePart = fieldLength - (sizeDecimalPart > 0 ? (sizeDecimalPart + 1) : 0); - StringBuilder format = new StringBuilder(fieldLength); + var format = new StringBuilder(fieldLength); - for (int i = 0; i < sizeWholePart; i++) + for (var i = 0; i < sizeWholePart; i++) { format.Append(i+1== sizeWholePart ? "0":"#"); @@ -129,7 +129,7 @@ public static byte[] NumericFormating(IFormattable doubleNum, { format.Append("."); - for (int i = 0; i < sizeDecimalPart; i++) + for (var i = 0; i < sizeDecimalPart; i++) { format.Append("0"); } From 6ec42ee5881345e4fc1750cbdcbdd7994e862382 Mon Sep 17 00:00:00 2001 From: jbtule Date: Fri, 24 Mar 2017 14:35:56 -0500 Subject: [PATCH 06/10] Refactor: reformat --- DotNetDBF.Enumerable/Enumerable.cs | 65 ++++---- DotNetDBF.Enumerable/Obsolete.cs | 12 +- DotNetDBF.Test/Test.cs | 254 +++++++++++++---------------- DotNetDBF/DBFBase.cs | 2 + DotNetDBF/DBFFieldType.cs | 3 +- DotNetDBF/DBFHeader.cs | 51 +++--- DotNetDBF/DBFReader.cs | 73 ++++----- DotNetDBF/DBFWriter.cs | 97 +++++------ DotNetDBF/DBTHeader.cs | 29 +--- DotNetDBF/MemoValue.cs | 58 +++---- DotNetDBF/Utils.cs | 70 ++++---- 11 files changed, 318 insertions(+), 396 deletions(-) diff --git a/DotNetDBF.Enumerable/Enumerable.cs b/DotNetDBF.Enumerable/Enumerable.cs index 6591810..6d96eae 100644 --- a/DotNetDBF.Enumerable/Enumerable.cs +++ b/DotNetDBF.Enumerable/Enumerable.cs @@ -5,6 +5,7 @@ using System.Runtime.CompilerServices; using ImpromptuInterface; using ImpromptuInterface.Dynamic; + namespace DotNetDBF.Enumerable { /// @@ -17,6 +18,7 @@ public interface IDBFIntercepter /// /// bool Exists(string fieldName); + /// /// Gets the data row. /// @@ -44,7 +46,6 @@ protected BaseDBFIntercepter(object[] wrappedObj, string[] fieldNames) { _wrappedArray = wrappedObj; _fieldNames = fieldNames; - } public override IEnumerable GetDynamicMemberNames() @@ -62,7 +63,7 @@ public override bool TryGetMember(GetMemberBinder binder, out object result) result = null; var tLookup = binder.Name; var tIndex = Array.FindIndex(_fieldNames, - it => it.Equals(tLookup, StringComparison.InvariantCultureIgnoreCase)); + it => it.Equals(tLookup, StringComparison.InvariantCultureIgnoreCase)); if (tIndex < 0) return false; @@ -82,10 +83,9 @@ public override bool TryGetMember(GetMemberBinder binder, out object result) public override bool TrySetMember(SetMemberBinder binder, object value) { - var tLookup = binder.Name; var tIndex = Array.FindIndex(_fieldNames, - it => it.Equals(tLookup, StringComparison.InvariantCultureIgnoreCase)); + it => it.Equals(tLookup, StringComparison.InvariantCultureIgnoreCase)); if (tIndex < 0) return false; @@ -112,7 +112,6 @@ public object[] GetDataRow() /// public static partial class DBFEnumerable { - /// /// New Blank Row Dynamic object that matches writer; /// @@ -155,7 +154,7 @@ public static void AddRecord(this DBFWriter writer, Enumerable.IDBFIntercepter v /// The reader. /// The prototype. Anonymous class instance /// - public static IEnumerable AllRecords(this DBFReader reader, T prototype =null) where T : class + public static IEnumerable AllRecords(this DBFReader reader, T prototype = null) where T : class { var tType = typeof(T); @@ -166,10 +165,12 @@ public static IEnumerable AllRecords(this DBFReader reader, T prototype =n f => f.Name.Equals(it.Name, StringComparison.InvariantCultureIgnoreCase)) >= 0); var tProps = tProperties .Select( - it => - Array.FindIndex(reader.Fields, - jt => jt.Name.Equals(it.Name, StringComparison.InvariantCultureIgnoreCase))).Where(it=> it >= 0).ToArray(); - + it => + Array.FindIndex(reader.Fields, + jt => jt.Name.Equals(it.Name, StringComparison.InvariantCultureIgnoreCase))) + .Where(it => it >= 0) + .ToArray(); + var tOrderedProps = tProps.OrderBy(it => it).ToArray(); var tReturn = new List(); @@ -179,31 +180,26 @@ public static IEnumerable AllRecords(this DBFReader reader, T prototype =n var tAnon = reader.NextRecord(tProps, tOrderedProps); while (tAnon != null) { - - tReturn.Add((T)Activator.CreateInstance(tType, tAnon)); + tReturn.Add((T) Activator.CreateInstance(tType, tAnon)); tAnon = reader.NextRecord(tProps, tOrderedProps); } - return tReturn; } - - var t = reader.NextRecord(tProps, tOrderedProps); - - while (t != null) - { - var tIntercepter = new Enumerable.DBFIntercepter(t, tProperties.Select(it => it.Name).ToArray()); + var t = reader.NextRecord(tProps, tOrderedProps); - tReturn.Add(tIntercepter.ActLike(typeof(Enumerable.IDBFIntercepter))); - t = reader.NextRecord(tProps, tOrderedProps); - } + while (t != null) + { + var tIntercepter = new Enumerable.DBFIntercepter(t, tProperties.Select(it => it.Name).ToArray()); + tReturn.Add(tIntercepter.ActLike(typeof(Enumerable.IDBFIntercepter))); + t = reader.NextRecord(tProps, tOrderedProps); + } - return tReturn; - + return tReturn; } /// @@ -213,19 +209,19 @@ public static IEnumerable AllRecords(this DBFReader reader, T prototype =n /// The where column name. /// What the were column should equal. /// - public static IEnumerable DynamicAllRecords(this DBFReader reader, string whereColumn = null, dynamic whereColumnEquals = null) + public static IEnumerable DynamicAllRecords(this DBFReader reader, string whereColumn = null, + dynamic whereColumnEquals = null) { - - var tProperties = reader.GetSelectFields().Select(it=>it.Name).ToArray(); + var tProperties = reader.GetSelectFields().Select(it => it.Name).ToArray(); - int? tWhereColumn=null; - if(!String.IsNullOrEmpty(whereColumn)) + int? tWhereColumn = null; + if (!String.IsNullOrEmpty(whereColumn)) { tWhereColumn = Array.FindIndex(tProperties, - it => it.Equals(whereColumn, StringComparison.InvariantCultureIgnoreCase)); + it => it.Equals(whereColumn, StringComparison.InvariantCultureIgnoreCase)); } - + var tReturn = new List(); var t = reader.NextRecord(); @@ -234,7 +230,7 @@ public static IEnumerable DynamicAllRecords(this DBFReader reader, stri if (tWhereColumn.HasValue) { dynamic tO = t[tWhereColumn.Value]; - if(!tO.Equals(whereColumnEquals)) + if (!tO.Equals(whereColumnEquals)) { t = reader.NextRecord(); continue; @@ -251,9 +247,6 @@ public static IEnumerable DynamicAllRecords(this DBFReader reader, stri return tReturn; - } - - } -} +} \ No newline at end of file diff --git a/DotNetDBF.Enumerable/Obsolete.cs b/DotNetDBF.Enumerable/Obsolete.cs index 8a49f68..6138979 100644 --- a/DotNetDBF.Enumerable/Obsolete.cs +++ b/DotNetDBF.Enumerable/Obsolete.cs @@ -3,13 +3,11 @@ namespace DotNetDBF.Enumerable { - public static partial class DBFEnumerable { [Obsolete("DotNetDBF.Enumerable.IDBFIntercepter is the new interface name")] public interface IDBFIntercepter : DotNetDBF.Enumerable.IDBFIntercepter { - } [Obsolete("DotNetDBF.Enumerable.DBFIntercepter is the new class name")] @@ -54,7 +52,7 @@ public static void WriteRecord(DBFWriter writer, IDBFIntercepter value) /// The value. public static void AddRecord(DBFWriter writer, IDBFIntercepter value) { - writer.AddRecord(writer,value); + writer.AddRecord(writer, value); } /// @@ -68,7 +66,6 @@ public static void AddRecord(DBFWriter writer, IDBFIntercepter value) /// public static IEnumerable AllRecords(DBFReader reader, T prototype = null) where T : class { - return reader.AllRecords(prototype); } @@ -80,17 +77,15 @@ public static IEnumerable AllRecords(DBFReader reader, T prototype = null) /// What the were column should equal. /// public static IEnumerable DynamicAllRecords(DBFReader reader, string whereColumn = null, - dynamic whereColumnEquals = null) + dynamic whereColumnEquals = null) { - - return reader.DynamicAllRecords(whereColumn, (object)whereColumnEquals); + return reader.DynamicAllRecords(whereColumn, (object) whereColumnEquals); } [Obsolete("DotNetDBF.Enumerable.IDBFIntercepter is the new interface name")] public interface IDBFIntercepter : DotNetDBF.Enumerable.IDBFIntercepter { - } [Obsolete("DotNetDBF.Enumerable.DBFIntercepter is the new class name")] @@ -101,6 +96,5 @@ public DBFIntercepter(object[] wrappedObj, string[] fieldNames) { } } - } } \ No newline at end of file diff --git a/DotNetDBF.Test/Test.cs b/DotNetDBF.Test/Test.cs index e152926..daf4dfc 100644 --- a/DotNetDBF.Test/Test.cs +++ b/DotNetDBF.Test/Test.cs @@ -9,24 +9,13 @@ namespace DotNetDBFTest { public interface ITestInterface { - string F1 - { - get; - set; - } + string F1 { get; set; } - string F2 - { - get; - set; - } + string F2 { get; set; } - string F3 - { - get; - set; - } + string F3 { get; set; } } + [TestFixture] public class DotNetDBFTest : AssertionHelper { @@ -44,9 +33,9 @@ public class DotNetDBFTest : AssertionHelper private string GetCharacters(int aLength) { - var chars = new[] { "a", "b", "c", "d", "e", "f", "g", " " }; + var chars = new[] {"a", "b", "c", "d", "e", "f", "g", " "}; var returnval = string.Join(string.Empty, - Enumerable.Range(0, aLength).Select(it => chars[it % chars.Length]).ToArray()); + Enumerable.Range(0, aLength).Select(it => chars[it % chars.Length]).ToArray()); Assert.That(returnval.Length, EqualTo(aLength), "GetCharacters() did not return correct length string"); return returnval; } @@ -65,12 +54,12 @@ public void checkDataType_N() using ( Stream fos = File.Open(TestPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var writer = new DBFWriter(); var field = new DBFField("F1", NativeDbType.Numeric, 15, 0); - writer.Fields = new[] { field }; + writer.Fields = new[] {field}; writtenValue = 123456789012345L; writer.AddRecord(writtenValue); @@ -79,8 +68,8 @@ public void checkDataType_N() using ( Stream fis = File.Open(TestPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var reader = new DBFReader(fis); @@ -99,12 +88,12 @@ public void checkLongCharLengthWithClipper() using ( Stream fos = File.Open(TestClipLongPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var writer = new DBFWriter(); var field = new DBFField("F1", NativeDbType.Char, fieldLength); - writer.Fields = new[] { field }; + writer.Fields = new[] {field}; writtenValue = GetCharacters(fieldLength); writer.AddRecord(writtenValue); @@ -113,8 +102,8 @@ public void checkLongCharLengthWithClipper() using ( Stream fis = File.Open(TestClipLongPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var reader = new DBFReader(fis); Assert.That(reader.Fields.First().FieldLength, EqualTo(fieldLength)); @@ -125,7 +114,6 @@ public void checkLongCharLengthWithClipper() } - [Test] public void checkDataType_M() { @@ -134,15 +122,15 @@ public void checkDataType_M() using ( Stream fos = File.Open(TestMemoPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") + }; var field = new DBFField("F1", NativeDbType.Memo); - writer.Fields = new[] { field }; + writer.Fields = new[] {field}; writtenValue = new MemoValue(GetCharacters(fieldLength)); writer.AddRecord(writtenValue); @@ -151,13 +139,13 @@ public void checkDataType_M() using ( Stream fis = File.Open(TestMemoPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") + }; var readValues = reader.NextRecord(); Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read"); @@ -172,17 +160,17 @@ public void checkSelect() using ( Stream fos = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; + writer.Fields = new[] {field, field2, field3}; writtenValue = "alpha"; writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); @@ -191,13 +179,13 @@ public void checkSelect() using ( Stream fis = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; reader.SetSelectFields("F3"); var readValues = reader.NextRecord(); @@ -214,17 +202,17 @@ public void checkSelectDynamic() using ( Stream fos = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; + writer.Fields = new[] {field, field2, field3}; writtenValue = "alpha"; writtenMemo = GetCharacters(fieldLength); @@ -234,13 +222,13 @@ public void checkSelectDynamic() using ( Stream fis = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; reader.SetSelectFields("F1", "F3"); var readValues = reader.DynamicAllRecords().First(); @@ -257,17 +245,17 @@ public void checkAnnoymous() using ( Stream fos = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; + writer.Fields = new[] {field, field2, field3}; writtenValue = "alpha"; writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); @@ -276,23 +264,21 @@ public void checkAnnoymous() using ( Stream fis = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; - var readValues = reader.AllRecords(new { F2 = default(decimal), F3 = default(string) }); + var readValues = reader.AllRecords(new {F2 = default(decimal), F3 = default(string)}); Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read"); } } - - [Test] public void checkProxy() { @@ -301,17 +287,17 @@ public void checkProxy() using ( Stream fos = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; + writer.Fields = new[] {field, field2, field3}; writtenValue = "alpha"; writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); @@ -320,13 +306,13 @@ public void checkProxy() using ( Stream fis = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; var readValues = reader.AllRecords(); @@ -342,17 +328,17 @@ public void checkDynamicProxy() using ( Stream fos = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; + writer.Fields = new[] {field, field2, field3}; writtenValue = "alpha"; writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); @@ -361,13 +347,13 @@ public void checkDynamicProxy() using ( Stream fis = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; var readValues = reader.DynamicAllRecords(); @@ -384,17 +370,17 @@ public void checkDynamicProxyWhere() using ( Stream fos = File.Open(TestSelectPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); var field3 = new DBFField("F3", NativeDbType.Char, 10); - writer.Fields = new[] { field, field2, field3 }; + writer.Fields = new[] {field, field2, field3}; writtenValue = "alpha"; writer.AddRecord(new MemoValue(GetCharacters(fieldLength)), 10, writtenValue); @@ -405,52 +391,43 @@ public void checkDynamicProxyWhere() } using (var reader = new DBFReader(TestSelectPath) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }) - { - var readValues = reader.DynamicAllRecords(); Assert.That(Equals(readValues.Count(), 2), "All Records not matching"); - } using (var reader = new DBFReader(TestSelectPath) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }) - { - var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 10); Assert.That(Equals(readValues.Count(), 1), "All Records not matching"); - } using (var reader = new DBFReader(TestSelectPath) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }) - { - var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 12); Assert.That(Equals(readValues.Count(), 1), "All Records not matching"); - } using (var reader = new DBFReader(TestSelectPath) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + }) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }) - { - var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 13); Assert.That(Equals(readValues.Count(), 0), "All Records not matching"); - } - } [Test] @@ -488,8 +465,6 @@ public void checkRAFwriting() writer.WriteRecord("Yellow", 44); } println("done."); - - } [Test] @@ -506,15 +481,15 @@ public void ShowPaths() public void Test() { using ( - Stream fis = - File.Open(@"f:\st\dev\testdata\p.dbf", - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + Stream fis = + File.Open(@"f:\st\dev\testdata\p.dbf", + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(@"f:\st\dev\testdata\p.dbf", "DBT") - }; + { + DataMemoLoc = Path.ChangeExtension(@"f:\st\dev\testdata\p.dbf", "DBT") + }; var readValues = reader.NextRecord(); Console.WriteLine(readValues); @@ -525,9 +500,7 @@ public void Test() [Test] public void test1() { - Assert.DoesNotThrow(() => { new DBFWriter(); }, "Can't Create empty DBFWriter Object"); - } [Test] @@ -546,18 +519,17 @@ public void test3() public void WriteSample() { - var field = new DBFField { Name = "F1", DataType = NativeDbType.Numeric }; - var writer = new DBFWriter { Fields = new[] { field } }; + var field = new DBFField {Name = "F1", DataType = NativeDbType.Numeric}; + var writer = new DBFWriter {Fields = new[] {field}}; writer.AddRecord(3); using ( Stream fos = File.Open(TestPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + FileMode.OpenOrCreate, + FileAccess.ReadWrite)) { writer.Write(fos); } - } @@ -568,7 +540,5 @@ public void ReadSample() Assert.That(reader.RecordCount, EqualTo(1)); } } - - } } \ No newline at end of file diff --git a/DotNetDBF/DBFBase.cs b/DotNetDBF/DBFBase.cs index 9648441..0942e3a 100644 --- a/DotNetDBF/DBFBase.cs +++ b/DotNetDBF/DBFBase.cs @@ -15,6 +15,7 @@ suggested by Nick Voznesensky /** Base class for DBFReader and DBFWriter. */ + using System.Text; namespace DotNetDBF @@ -30,6 +31,7 @@ public Encoding CharEncoding get { return _charEncoding; } } + public int BlockSize { set { _blockSize = value; } diff --git a/DotNetDBF/DBFFieldType.cs b/DotNetDBF/DBFFieldType.cs index c19021b..1b1a118 100644 --- a/DotNetDBF/DBFFieldType.cs +++ b/DotNetDBF/DBFFieldType.cs @@ -15,7 +15,7 @@ This file is part of DotNetDBF packege. namespace DotNetDBF { - public enum NativeDbType :byte + public enum NativeDbType : byte { Autoincrement = (byte) 0x2B, //+ in ASCII Timestamp = (byte) 0x40, //@ in ASCII @@ -40,6 +40,7 @@ public static class DBFFieldType public const byte True = 0x54; //T in ascii public const byte UnknownByte = 0x3F; //Unknown Bool value public const string Unknown = "?"; //Unknown value + public static DbType FromNative(NativeDbType aByte) { switch (aByte) diff --git a/DotNetDBF/DBFHeader.cs b/DotNetDBF/DBFHeader.cs index 4c961f7..aa81199 100644 --- a/DotNetDBF/DBFHeader.cs +++ b/DotNetDBF/DBFHeader.cs @@ -20,26 +20,22 @@ original author (javadbf): anil@linuxense.com 2004/03/31 namespace DotNetDBF { - public static class DBFSigniture { public const byte NotSet = 0, - WithMemo = 0x80, - DBase3 = 0x03, - DBase3WithMemo = DBase3 | WithMemo; - + WithMemo = 0x80, + DBase3 = 0x03, + DBase3WithMemo = DBase3 | WithMemo; } [Flags] public enum MemoFlags : byte { - } public class DBFHeader { - public const byte HeaderRecordTerminator = 0x0D; private byte _day; /* 3 */ @@ -67,35 +63,30 @@ public DBFHeader() internal byte Signature { - get - { - return _signature; - }set - { - _signature = value; - } + get { return _signature; } + set { _signature = value; } } internal short Size { get { - return (short) (sizeof (byte) + - sizeof (byte) + sizeof (byte) + sizeof (byte) + - sizeof (int) + - sizeof (short) + - sizeof (short) + - sizeof (short) + - sizeof (byte) + - sizeof (byte) + - sizeof (int) + - sizeof (int) + - sizeof (int) + - sizeof (byte) + - sizeof (byte) + - sizeof (short) + + return (short) (sizeof(byte) + + sizeof(byte) + sizeof(byte) + sizeof(byte) + + sizeof(int) + + sizeof(short) + + sizeof(short) + + sizeof(short) + + sizeof(byte) + + sizeof(byte) + + sizeof(int) + + sizeof(int) + + sizeof(int) + + sizeof(byte) + + sizeof(byte) + + sizeof(short) + (DBFField.SIZE * _fieldArray.Length) + - sizeof (byte)); + sizeof(byte)); } } @@ -109,7 +100,7 @@ internal short RecordSize tRecordLength += _fieldArray[i].FieldLength; } - return (short)(tRecordLength + 1); + return (short) (tRecordLength + 1); } } diff --git a/DotNetDBF/DBFReader.cs b/DotNetDBF/DBFReader.cs index e04f0fa..76ef565 100644 --- a/DotNetDBF/DBFReader.cs +++ b/DotNetDBF/DBFReader.cs @@ -18,6 +18,7 @@ original author (javadbf): anil@linuxense.com 2004/03/31 using System.IO; using System.Text; using System.Linq; + namespace DotNetDBF { public class DBFReader : DBFBase, IDisposable @@ -26,8 +27,8 @@ public class DBFReader : DBFBase, IDisposable private DBFHeader _header; private string _dataMemoLoc; - private int[] _selectFields = new int[]{}; - private int[] _orderedSelectFields = new int[] { }; + private int[] _selectFields = new int[] {}; + private int[] _orderedSelectFields = new int[] {}; /* Class specific variables */ private bool isClosed = true; @@ -43,14 +44,13 @@ @param InputStream where the data is read from. */ - public void SetSelectFields(params string[] aParams) { _selectFields = aParams.Select( it => - Array.FindIndex(_header.FieldArray, - jt => jt.Name.Equals(it, StringComparison.InvariantCultureIgnoreCase))).ToArray(); + Array.FindIndex(_header.FieldArray, + jt => jt.Name.Equals(it, StringComparison.InvariantCultureIgnoreCase))).ToArray(); _orderedSelectFields = _selectFields.OrderBy(it => it).ToArray(); } @@ -67,10 +67,10 @@ public DBFReader(string anIn) { _dataInputStream = new BinaryReader( File.Open(anIn, - FileMode.Open, - FileAccess.Read, - FileShare.Read) - ); + FileMode.Open, + FileAccess.Read, + FileShare.Read) + ); var dbtPath = Path.ChangeExtension(anIn, "dbt"); if (File.Exists(dbtPath)) @@ -154,16 +154,10 @@ public void Dispose() #endregion - public string DataMemoLoc { - get - { - return _dataMemoLoc; - }set - { - _dataMemoLoc = value; - } + get { return _dataMemoLoc; } + set { _dataMemoLoc = value; } } public override String ToString() @@ -195,6 +189,7 @@ Reads the returns the next row in the DBF stream. @returns The next row as an Object array. Types of the elements these arrays follow the convention mentioned in the class description. */ + public Object[] NextRecord() { return NextRecord(_selectFields, _orderedSelectFields); @@ -234,9 +229,9 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn var k = -1; for (var i = 0; i < _header.FieldArray.Length; i++) { - if (tOrderdSelectIndexes.Count == j && j != 0 - || (tOrderdSelectIndexes.Count > j && tOrderdSelectIndexes[j] > i && tOrderdSelectIndexes[j] != k)) + || + (tOrderdSelectIndexes.Count > j && tOrderdSelectIndexes[j] > i && tOrderdSelectIndexes[j] != k)) { _dataInputStream.BaseStream.Seek(_header.FieldArray[i].FieldLength, SeekOrigin.Current); continue; @@ -245,7 +240,7 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn k = tOrderdSelectIndexes[j]; j++; - + switch (_header.FieldArray[i].DataType) { case NativeDbType.Char: @@ -262,18 +257,18 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn var t_byte_year = new byte[4]; _dataInputStream.Read(t_byte_year, - 0, - t_byte_year.Length); + 0, + t_byte_year.Length); var t_byte_month = new byte[2]; _dataInputStream.Read(t_byte_month, - 0, - t_byte_month.Length); + 0, + t_byte_month.Length); var t_byte_day = new byte[2]; _dataInputStream.Read(t_byte_day, - 0, - t_byte_day.Length); + 0, + t_byte_day.Length); try { @@ -318,7 +313,8 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn && tLast != " " && tLast != DBFFieldType.Unknown) { - recordObjects[i] = Double.Parse(tParsed, NumberStyles.Float | NumberStyles.AllowLeadingWhite); + recordObjects[i] = Double.Parse(tParsed, + NumberStyles.Float | NumberStyles.AllowLeadingWhite); } else { @@ -328,7 +324,7 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn catch (FormatException e) { throw new DBFException("Failed to parse Float", - e); + e); } break; @@ -341,8 +337,8 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn _header.FieldArray[i].FieldLength ]; _dataInputStream.Read(t_numeric, - 0, - t_numeric.Length); + 0, + t_numeric.Length); var tParsed = CharEncoding.GetString(t_numeric); var tLast = tParsed.Substring(tParsed.Length - 1); @@ -350,7 +346,8 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn && tLast != " " && tLast != DBFFieldType.Unknown) { - recordObjects[i] = Decimal.Parse(tParsed, NumberStyles.Float | NumberStyles.AllowLeadingWhite); + recordObjects[i] = Decimal.Parse(tParsed, + NumberStyles.Float | NumberStyles.AllowLeadingWhite); } else { @@ -378,27 +375,29 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn else if (t_logical == DBFFieldType.UnknownByte) { recordObjects[i] = DBNull.Value; - }else + } + else { recordObjects[i] = false; } break; case NativeDbType.Memo: - if(string.IsNullOrEmpty(_dataMemoLoc)) + if (string.IsNullOrEmpty(_dataMemoLoc)) throw new Exception("Memo Location Not Set"); var tRawMemoPointer = _dataInputStream.ReadBytes(_header.FieldArray[i].FieldLength); var tMemoPoiner = CharEncoding.GetString(tRawMemoPointer); - if(string.IsNullOrEmpty(tMemoPoiner)) + if (string.IsNullOrEmpty(tMemoPoiner)) { recordObjects[i] = DBNull.Value; break; } long tBlock; - if(!long.TryParse(tMemoPoiner, out tBlock)) - { //Because Memo files can vary and are often the least importat data, + if (!long.TryParse(tMemoPoiner, out tBlock)) + { + //Because Memo files can vary and are often the least importat data, //we will return null when it doesn't match our format. recordObjects[i] = DBNull.Value; break; @@ -412,8 +411,6 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn recordObjects[i] = DBNull.Value; break; } - - } } catch (EndOfStreamException) diff --git a/DotNetDBF/DBFWriter.cs b/DotNetDBF/DBFWriter.cs index 66c2c04..9d749d4 100644 --- a/DotNetDBF/DBFWriter.cs +++ b/DotNetDBF/DBFWriter.cs @@ -41,8 +41,8 @@ public DBFWriter(String dbfFile) { raf = File.Open(dbfFile, - FileMode.OpenOrCreate, - FileAccess.ReadWrite); + FileMode.OpenOrCreate, + FileAccess.ReadWrite); _dataMemoLoc = Path.ChangeExtension(dbfFile, "dbt"); @@ -60,7 +60,7 @@ is an empty/non-existent file or not. /* position file pointer at the end of the raf */ raf.Seek(-1, SeekOrigin.End); - /* to ignore the END_OF_DATA byte at EoF */ + /* to ignore the END_OF_DATA byte at EoF */ } catch (FileNotFoundException e) { @@ -91,7 +91,7 @@ is an empty/non-existent file or not. /* position file pointer at the end of the raf */ raf.Seek(-1, SeekOrigin.End); - /* to ignore the END_OF_DATA byte at EoF */ + /* to ignore the END_OF_DATA byte at EoF */ recordCount = header.NumberOfRecords; @@ -99,13 +99,8 @@ is an empty/non-existent file or not. public byte Signature { - get - { - return header.Signature; - }set - { - header.Signature = value; - } + get { return header.Signature; } + set { header.Signature = value; } } public string DataMemoLoc @@ -115,25 +110,22 @@ public string DataMemoLoc } public byte LanguageDriver - { + { set { if (header.LanguageDriver != 0x00) - { - throw new DBFException("LanguageDriver has already been set"); - } + { + throw new DBFException("LanguageDriver has already been set"); + } header.LanguageDriver = value; } - } - - + } + + public DBFField[] Fields { - get - { - return header.FieldArray; - } + get { return header.FieldArray; } set @@ -172,7 +164,7 @@ this is a new/non-existent file. So write header before proceeding } catch (IOException e) { - throw new DBFException("Error accesing file",e); + throw new DBFException("Error accesing file", e); } } } @@ -369,21 +361,21 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) var str_value = objectArray[j].ToString(); dataOutput.Write( Utils.textPadding(str_value, - CharEncoding, - header.FieldArray[j]. - FieldLength - ) - ); + CharEncoding, + header.FieldArray[j]. + FieldLength + ) + ); } else { dataOutput.Write( Utils.textPadding("", - CharEncoding, - header.FieldArray[j]. - FieldLength - ) - ); + CharEncoding, + header.FieldArray[j]. + FieldLength + ) + ); } break; @@ -415,8 +407,8 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) CharEncoding, header.FieldArray[j].FieldLength, header.FieldArray[j].DecimalCount - ) - ); + ) + ); } else { @@ -426,8 +418,8 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) CharEncoding, header.FieldArray[j].FieldLength, Utils.ALIGN_RIGHT - ) - ); + ) + ); } break; @@ -443,8 +435,8 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) CharEncoding, header.FieldArray[j].FieldLength, header.FieldArray[j].DecimalCount - ) - ); + ) + ); } else { @@ -454,8 +446,8 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) CharEncoding, header.FieldArray[j].FieldLength, Utils.ALIGN_RIGHT - ) - ); + ) + ); } break; @@ -486,16 +478,17 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) tMemoValue.Write(this); - dataOutput.Write( Utils.NumericFormating(tMemoValue.Block,CharEncoding,10,0)); - }else - { - dataOutput.Write( - Utils.textPadding("", - CharEncoding, - 10 - ) - ); - } + dataOutput.Write(Utils.NumericFormating(tMemoValue.Block, CharEncoding, 10, 0)); + } + else + { + dataOutput.Write( + Utils.textPadding("", + CharEncoding, + 10 + ) + ); + } break; @@ -507,4 +500,4 @@ private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) } /* iterating through the fields */ } } -} +} \ No newline at end of file diff --git a/DotNetDBF/DBTHeader.cs b/DotNetDBF/DBTHeader.cs index d4bb123..725b2b2 100644 --- a/DotNetDBF/DBTHeader.cs +++ b/DotNetDBF/DBTHeader.cs @@ -16,33 +16,22 @@ public class DBTHeader internal int NextBlock { - get - { - return _nextBlock; - } - set - { - _nextBlock = value; - } + get { return _nextBlock; } + set { _nextBlock = value; } } internal byte Version { - get - { - return _version; - }set - { - _version = value; - } + get { return _version; } + set { _version = value; } } internal void Write(BinaryWriter dataOutput) { - dataOutput.Write(_nextBlock); - dataOutput.Write(new byte[12]); - dataOutput.Write(_version); - dataOutput.Write(new byte[495]); + dataOutput.Write(_nextBlock); + dataOutput.Write(new byte[12]); + dataOutput.Write(_version); + dataOutput.Write(new byte[495]); } } -} +} \ No newline at end of file diff --git a/DotNetDBF/MemoValue.cs b/DotNetDBF/MemoValue.cs index cba8c52..d7c168e 100644 --- a/DotNetDBF/MemoValue.cs +++ b/DotNetDBF/MemoValue.cs @@ -7,18 +7,15 @@ namespace DotNetDBF { public class MemoValue { - public const string MemoTerminator = "\x1A"; private bool _loaded; private bool _new; - - + public MemoValue(string aValue) { _lockName = $"DotNetDBF.Memo.new.{Guid.NewGuid()}"; Value = aValue; - } @@ -38,10 +35,7 @@ internal MemoValue(long block, DBFBase aBase, string fileLoc) internal long Block { - get - { - return _block; - } + get { return _block; } } internal void Write(DBFWriter aBase) @@ -55,13 +49,13 @@ internal void Write(DBFWriter aBase) var raf = File.Open(aBase.DataMemoLoc, - FileMode.OpenOrCreate, - FileAccess.ReadWrite); + FileMode.OpenOrCreate, + FileAccess.ReadWrite); /* before proceeding check whether the passed in File object is an empty/non-existent file or not. */ - + using (var tWriter = new BinaryWriter(raf, aBase.CharEncoding)) { @@ -78,15 +72,15 @@ is an empty/non-existent file or not. } var tPosition = raf.Seek(0, SeekOrigin.End); //Got To End Of File - var tBlockDiff = tPosition%aBase.BlockSize; + var tBlockDiff = tPosition % aBase.BlockSize; if (tBlockDiff != 0) { tPosition = raf.Seek(aBase.BlockSize - tBlockDiff, SeekOrigin.Current); } - _block = tPosition/aBase.BlockSize; + _block = tPosition / aBase.BlockSize; var tData = aBase.CharEncoding.GetBytes(tValue); var tDataLength = tData.Length; - var tNewDiff = (tDataLength%aBase.BlockSize); + var tNewDiff = (tDataLength % aBase.BlockSize); tWriter.Write(tData); if (tNewDiff != 0) tWriter.Seek(aBase.BlockSize - (tDataLength % aBase.BlockSize), SeekOrigin.Current); @@ -101,16 +95,15 @@ public string Value { lock (_lockName) { - if (!_new && !_loaded) { - using (var reader =new BinaryReader( - File.Open(_fileLoc, - FileMode.Open, - FileAccess.Read, - FileShare.Read))) + using (var reader = new BinaryReader( + File.Open(_fileLoc, + FileMode.Open, + FileAccess.Read, + FileShare.Read))) { - reader.BaseStream.Seek(_block*_base.BlockSize, SeekOrigin.Begin); + reader.BaseStream.Seek(_block * _base.BlockSize, SeekOrigin.Begin); string tString; var tStringBuilder = new StringBuilder(); int tIndex; @@ -119,30 +112,30 @@ public string Value do { var tData = reader.ReadBytes(_base.BlockSize); - + tString = _base.CharEncoding.GetString(tData); tIndex = tString.IndexOf(MemoTerminator); if (tIndex != -1) tString = tString.Substring(0, tIndex); tStringBuilder.Append(tString); } while (tIndex == -1); - _value = tStringBuilder.ToString().Replace(tSoftReturn,String.Empty); + _value = tStringBuilder.ToString().Replace(tSoftReturn, String.Empty); } _loaded = true; } return _value; } - }set + } + set { lock (_lockName) { _new = true; - + _value = value; } - } } @@ -150,20 +143,21 @@ public override int GetHashCode() { return _lockName.GetHashCode(); } + public override string ToString() { return Value; - } + } + public override bool Equals(object obj) { - if(obj as MemoValue == null) + if (obj as MemoValue == null) return false; - if(ReferenceEquals(this,obj)) + if (ReferenceEquals(this, obj)) { return true; } - return Value.Equals(((MemoValue)obj).Value); + return Value.Equals(((MemoValue) obj).Value); } } - -} +} \ No newline at end of file diff --git a/DotNetDBF/Utils.cs b/DotNetDBF/Utils.cs index 4176931..30b2d6a 100644 --- a/DotNetDBF/Utils.cs +++ b/DotNetDBF/Utils.cs @@ -23,7 +23,6 @@ namespace DotNetDBF { public static class Utils { - public const int ALIGN_LEFT = 10; public const int ALIGN_RIGHT = 12; @@ -51,30 +50,30 @@ public static byte[] trimLeftSpaces(byte[] arr) } public static byte[] textPadding(String text, - Encoding charEncoding, - int length) + Encoding charEncoding, + int length) { return textPadding(text, charEncoding, length, ALIGN_LEFT); } public static byte[] textPadding(String text, - Encoding charEncoding, - int length, - int alignment) + Encoding charEncoding, + int length, + int alignment) { return textPadding(text, - charEncoding, - length, - alignment, - DBFFieldType.Space); + charEncoding, + length, + alignment, + DBFFieldType.Space); } public static byte[] textPadding(String text, - Encoding charEncoding, - int length, - int alignment, - byte paddingByte) + Encoding charEncoding, + int length, + int alignment, + byte paddingByte) { var tEncoding = charEncoding; var inputBytes = tEncoding.GetBytes(text); @@ -89,19 +88,19 @@ public static byte[] textPadding(String text, { case ALIGN_LEFT: Array.Copy(inputBytes, - 0, - byte_array, - 0, - inputBytes.Length); + 0, + byte_array, + 0, + inputBytes.Length); break; case ALIGN_RIGHT: var t_offset = length - text.Length; Array.Copy(inputBytes, - 0, - byte_array, - t_offset, - inputBytes.Length); + 0, + byte_array, + t_offset, + inputBytes.Length); break; } @@ -109,9 +108,9 @@ public static byte[] textPadding(String text, } public static byte[] NumericFormating(IFormattable doubleNum, - Encoding charEncoding, - int fieldLength, - int sizeDecimalPart) + Encoding charEncoding, + int fieldLength, + int sizeDecimalPart) { var sizeWholePart = fieldLength - @@ -121,8 +120,7 @@ public static byte[] NumericFormating(IFormattable doubleNum, for (var i = 0; i < sizeWholePart; i++) { - - format.Append(i+1== sizeWholePart ? "0":"#"); + format.Append(i + 1 == sizeWholePart ? "0" : "#"); } if (sizeDecimalPart > 0) @@ -139,7 +137,7 @@ public static byte[] NumericFormating(IFormattable doubleNum, return textPadding( doubleNum.ToString(format.ToString(), - NumberFormatInfo.InvariantInfo), + NumberFormatInfo.InvariantInfo), charEncoding, fieldLength, ALIGN_RIGHT); @@ -149,26 +147,26 @@ public static bool contains(byte[] arr, byte value) { return Array.Exists(arr, - delegate(byte anItem) { return anItem == value; }); + delegate(byte anItem) { return anItem == value; }); } public static Type TypeForNativeDBType(NativeDbType aType) { - switch(aType) + switch (aType) { case NativeDbType.Char: - return typeof (string); + return typeof(string); case NativeDbType.Date: - return typeof (DateTime); + return typeof(DateTime); case NativeDbType.Numeric: - return typeof (decimal); + return typeof(decimal); case NativeDbType.Logical: - return typeof (bool); + return typeof(bool); case NativeDbType.Float: - return typeof (float); + return typeof(float); case NativeDbType.Memo: - return typeof (MemoValue); + return typeof(MemoValue); default: throw new ArgumentException("Unsupported Type"); } From 0eb72d3a136da11dcd7ff51cdb6abe15aa000003 Mon Sep 17 00:00:00 2001 From: jbtule Date: Fri, 24 Mar 2017 14:40:37 -0500 Subject: [PATCH 07/10] Fix for issue #5 DBFs always store with a period as decimal point, but parse will expect comma if your current culture says so. Fix is to specify invariant culuture. --- DotNetDBF/DBFReader.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DotNetDBF/DBFReader.cs b/DotNetDBF/DBFReader.cs index 76ef565..e1878d4 100644 --- a/DotNetDBF/DBFReader.cs +++ b/DotNetDBF/DBFReader.cs @@ -314,7 +314,7 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn && tLast != DBFFieldType.Unknown) { recordObjects[i] = Double.Parse(tParsed, - NumberStyles.Float | NumberStyles.AllowLeadingWhite); + NumberStyles.Float | NumberStyles.AllowLeadingWhite, NumberFormatInfo.InvariantInfo); } else { @@ -347,7 +347,7 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn && tLast != DBFFieldType.Unknown) { recordObjects[i] = Decimal.Parse(tParsed, - NumberStyles.Float | NumberStyles.AllowLeadingWhite); + NumberStyles.Float | NumberStyles.AllowLeadingWhite, NumberFormatInfo.InvariantInfo); } else { From 0e8e6cbfe61cb2f160c66a2c26b7d1b5a5e1619a Mon Sep 17 00:00:00 2001 From: jbtule Date: Fri, 24 Mar 2017 14:54:05 -0500 Subject: [PATCH 08/10] Refactor: Expresion Bodies and private name fix --- DotNetDBF/DBFField.cs | 13 ++----------- DotNetDBF/DBFHeader.cs | 38 ++++++++++++++++---------------------- DotNetDBF/DBFReader.cs | 20 +++++++------------- DotNetDBF/MemoValue.cs | 5 +---- 4 files changed, 26 insertions(+), 50 deletions(-) diff --git a/DotNetDBF/DBFField.cs b/DotNetDBF/DBFField.cs index e44c3e5..b275077 100644 --- a/DotNetDBF/DBFField.cs +++ b/DotNetDBF/DBFField.cs @@ -69,10 +69,7 @@ public DBFField(string aFieldName, DecimalCount = aDecimalCount; } - public int Size - { - get { return SIZE; } - } + public int Size => SIZE; /** Returns the name of the field. @@ -108,13 +105,7 @@ Returns the data type of the field. @return Data type as byte. */ - public Type Type - { - get - { - return Utils.TypeForNativeDBType(DataType); - } - } + public Type Type => Utils.TypeForNativeDBType(DataType); public NativeDbType DataType diff --git a/DotNetDBF/DBFHeader.cs b/DotNetDBF/DBFHeader.cs index aa81199..f87b99e 100644 --- a/DotNetDBF/DBFHeader.cs +++ b/DotNetDBF/DBFHeader.cs @@ -67,28 +67,22 @@ internal byte Signature set { _signature = value; } } - internal short Size - { - get - { - return (short) (sizeof(byte) + - sizeof(byte) + sizeof(byte) + sizeof(byte) + - sizeof(int) + - sizeof(short) + - sizeof(short) + - sizeof(short) + - sizeof(byte) + - sizeof(byte) + - sizeof(int) + - sizeof(int) + - sizeof(int) + - sizeof(byte) + - sizeof(byte) + - sizeof(short) + - (DBFField.SIZE * _fieldArray.Length) + - sizeof(byte)); - } - } + internal short Size => (short) (sizeof(byte) + + sizeof(byte) + sizeof(byte) + sizeof(byte) + + sizeof(int) + + sizeof(short) + + sizeof(short) + + sizeof(short) + + sizeof(byte) + + sizeof(byte) + + sizeof(int) + + sizeof(int) + + sizeof(int) + + sizeof(byte) + + sizeof(byte) + + sizeof(short) + + (DBFField.SIZE * _fieldArray.Length) + + sizeof(byte)); internal short RecordSize { diff --git a/DotNetDBF/DBFReader.cs b/DotNetDBF/DBFReader.cs index e1878d4..c4fdeb4 100644 --- a/DotNetDBF/DBFReader.cs +++ b/DotNetDBF/DBFReader.cs @@ -30,7 +30,7 @@ public class DBFReader : DBFBase, IDisposable private int[] _selectFields = new int[] {}; private int[] _orderedSelectFields = new int[] {}; /* Class specific variables */ - private bool isClosed = true; + private bool _isClosed = true; /** Initializes a DBFReader object. @@ -78,7 +78,7 @@ public DBFReader(string anIn) _dataMemoLoc = dbtPath; } - isClosed = false; + _isClosed = false; _header = new DBFHeader(); _header.Read(_dataInputStream); @@ -102,7 +102,7 @@ public DBFReader(Stream anIn) try { _dataInputStream = new BinaryReader(anIn); - isClosed = false; + _isClosed = false; _header = new DBFHeader(); _header.Read(_dataInputStream); @@ -125,10 +125,7 @@ public DBFReader(Stream anIn) Returns the number of records in the DBF. */ - public int RecordCount - { - get { return _header.NumberOfRecords; } - } + public int RecordCount => _header.NumberOfRecords; /** Returns the asked Field. In case of an invalid index, @@ -137,10 +134,7 @@ it returns a ArrayIndexOutofboundsException. @param index. Index of the field. Index of the first field is zero. */ - public DBFField[] Fields - { - get { return _header.FieldArray; } - } + public DBFField[] Fields => _header.FieldArray; #region IDisposable Members @@ -181,7 +175,7 @@ public override String ToString() public void Close() { _dataInputStream.Close(); - isClosed = true; + _isClosed = true; } /** @@ -198,7 +192,7 @@ public Object[] NextRecord() internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIndexes) { - if (isClosed) + if (_isClosed) { throw new DBFException("Source is not open"); } diff --git a/DotNetDBF/MemoValue.cs b/DotNetDBF/MemoValue.cs index d7c168e..ab3be10 100644 --- a/DotNetDBF/MemoValue.cs +++ b/DotNetDBF/MemoValue.cs @@ -33,10 +33,7 @@ internal MemoValue(long block, DBFBase aBase, string fileLoc) private readonly string _fileLoc; private string _value; - internal long Block - { - get { return _block; } - } + internal long Block => _block; internal void Write(DBFWriter aBase) { From a1aaefc6838da4f3af1f999e6e938eb852c2c328 Mon Sep 17 00:00:00 2001 From: jbtule Date: Fri, 24 Mar 2017 17:42:53 -0500 Subject: [PATCH 09/10] Mutli-Target .net Stanard 1.3 --- DotNetDBF.Test/Test.cs | 183 ++++++++++++++++++------------------- DotNetDBF/DBFFieldType.cs | 1 + DotNetDBF/DBFReader.cs | 52 +++++++++-- DotNetDBF/DBFWriter.cs | 43 ++++++++- DotNetDBF/DotNetDBF.csproj | 14 ++- DotNetDBF/MemoValue.cs | 33 +++---- 6 files changed, 201 insertions(+), 125 deletions(-) diff --git a/DotNetDBF.Test/Test.cs b/DotNetDBF.Test/Test.cs index daf4dfc..27a726f 100644 --- a/DotNetDBF.Test/Test.cs +++ b/DotNetDBF.Test/Test.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Linq; +using System.Runtime.CompilerServices; using DotNetDBF; using DotNetDBF.Enumerable; using NUnit.Framework; @@ -19,17 +20,21 @@ public interface ITestInterface [TestFixture] public class DotNetDBFTest : AssertionHelper { - private string TestPath = Path.Combine(Path.GetTempPath(), "121212.dbf"); + private string TestPath([CallerMemberName] string name = null) + => Path.Combine(Path.GetTempPath(), name + "_121212.dbf"); - private string TestRAFPath = - Path.Combine(Path.GetTempPath(), "raf-1212.dbf"); + private string TestRAFPath([CallerMemberName] string name = null) + => Path.Combine(Path.GetTempPath(), name + "_raf-1212.dbf"); - private string TestClipLongPath = Path.Combine(Path.GetTempPath(), "cliplong.dbf"); + private string TestClipLongPath([CallerMemberName] string name = null) + => Path.Combine(Path.GetTempPath(), name + "_cliplong.dbf"); - private string TestMemoPath = Path.Combine(Path.GetTempPath(), "clipmemo.dbf"); + private string TestMemoPath([CallerMemberName] string name = null) + => Path.Combine(Path.GetTempPath(), name + "_clipmemo.dbf"); - private string TestSelectPath = Path.Combine(Path.GetTempPath(), "select.dbf"); + private string TestSelectPath([CallerMemberName] string name = null) + => Path.Combine(Path.GetTempPath(), name + "_select.dbf"); private string GetCharacters(int aLength) { @@ -53,11 +58,11 @@ public void checkDataType_N() Decimal writtenValue; using ( Stream fos = - File.Open(TestPath, + File.Open(TestPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) + using (var writer = new DBFWriter()) { - var writer = new DBFWriter(); var field = new DBFField("F1", NativeDbType.Numeric, 15, 0); writer.Fields = new[] {field}; @@ -67,12 +72,11 @@ public void checkDataType_N() } using ( Stream fis = - File.Open(TestPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + File.Open(TestPath(), + FileMode.Open, + FileAccess.Read)) + using (var reader = new DBFReader(fis)) { - var reader = new DBFReader(fis); - var readValues = reader.NextRecord(); Assert.That(readValues[0], EqualTo(writtenValue), "Written Value Equals Read"); @@ -87,7 +91,7 @@ public void checkLongCharLengthWithClipper() string writtenValue; using ( Stream fos = - File.Open(TestClipLongPath, + File.Open(TestClipLongPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { @@ -101,7 +105,7 @@ public void checkLongCharLengthWithClipper() } using ( Stream fis = - File.Open(TestClipLongPath, + File.Open(TestClipLongPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { @@ -119,16 +123,12 @@ public void checkDataType_M() { var fieldLength = 2400; MemoValue writtenValue; - using ( - Stream fos = - File.Open(TestMemoPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + using (Stream fos = File.Open(TestMemoPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) + using (var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestMemoPath(), "DBT") + }) { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") - }; var field = new DBFField("F1", NativeDbType.Memo); writer.Fields = new[] {field}; @@ -136,16 +136,12 @@ public void checkDataType_M() writer.AddRecord(writtenValue); writer.Write(fos); } - using ( - Stream fis = - File.Open(TestMemoPath, - FileMode.OpenOrCreate, - FileAccess.ReadWrite)) + using (Stream fis = File.Open(TestMemoPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) + using (var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(TestMemoPath(), "DBT") + }) { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestMemoPath, "DBT") - }; var readValues = reader.NextRecord(); Assert.That(readValues[0], EqualTo(writtenValue), "Written Value not equaling Read"); @@ -159,13 +155,13 @@ public void checkSelect() string writtenValue; using ( Stream fos = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { var writer = new DBFWriter { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); @@ -178,13 +174,13 @@ public void checkSelect() } using ( Stream fis = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { var reader = new DBFReader(fis) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }; reader.SetSelectFields("F3"); var readValues = reader.NextRecord(); @@ -201,14 +197,14 @@ public void checkSelectDynamic() string writtenMemo; using ( Stream fos = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) + using (var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") + }) { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); var field3 = new DBFField("F3", NativeDbType.Char, 10); @@ -221,14 +217,14 @@ public void checkSelectDynamic() } using ( Stream fis = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) + using (var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") + }) { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; reader.SetSelectFields("F1", "F3"); var readValues = reader.DynamicAllRecords().First(); @@ -244,13 +240,13 @@ public void checkAnnoymous() string writtenValue; using ( Stream fos = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { var writer = new DBFWriter { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); @@ -263,13 +259,13 @@ public void checkAnnoymous() } using ( Stream fis = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { var reader = new DBFReader(fis) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }; var readValues = reader.AllRecords(new {F2 = default(decimal), F3 = default(string)}); @@ -286,13 +282,13 @@ public void checkProxy() string writtenValue; using ( Stream fos = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { var writer = new DBFWriter { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); @@ -305,13 +301,13 @@ public void checkProxy() } using ( Stream fis = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { var reader = new DBFReader(fis) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }; var readValues = reader.AllRecords(); @@ -327,14 +323,14 @@ public void checkDynamicProxy() string writtenValue; using ( Stream fos = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) + using (var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") + }) { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); var field3 = new DBFField("F3", NativeDbType.Char, 10); @@ -346,15 +342,14 @@ public void checkDynamicProxy() } using ( Stream fis = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) + using (var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") + }) { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; - var readValues = reader.DynamicAllRecords(); Assert.That(readValues.First().F3, StartsWith(writtenValue), "Written Value not equaling Read"); @@ -369,14 +364,14 @@ public void checkDynamicProxyWhere() string writtenValue; using ( Stream fos = - File.Open(TestSelectPath, + File.Open(TestSelectPath(), FileMode.OpenOrCreate, FileAccess.ReadWrite)) + using (var writer = new DBFWriter + { + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") + }) { - var writer = new DBFWriter - { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") - }; var field = new DBFField("F1", NativeDbType.Memo); var field2 = new DBFField("F2", NativeDbType.Numeric, 10); var field3 = new DBFField("F3", NativeDbType.Char, 10); @@ -390,9 +385,9 @@ public void checkDynamicProxyWhere() writer.Write(fos); } - using (var reader = new DBFReader(TestSelectPath) + using (var reader = new DBFReader(TestSelectPath()) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }) { var readValues = reader.DynamicAllRecords(); @@ -400,9 +395,9 @@ public void checkDynamicProxyWhere() Assert.That(Equals(readValues.Count(), 2), "All Records not matching"); } - using (var reader = new DBFReader(TestSelectPath) + using (var reader = new DBFReader(TestSelectPath()) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }) { var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 10); @@ -410,18 +405,18 @@ public void checkDynamicProxyWhere() Assert.That(Equals(readValues.Count(), 1), "All Records not matching"); } - using (var reader = new DBFReader(TestSelectPath) + using (var reader = new DBFReader(TestSelectPath()) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }) { var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 12); Assert.That(Equals(readValues.Count(), 1), "All Records not matching"); } - using (var reader = new DBFReader(TestSelectPath) + using (var reader = new DBFReader(TestSelectPath()) { - DataMemoLoc = Path.ChangeExtension(TestSelectPath, "DBT") + DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT") }) { var readValues = reader.DynamicAllRecords(whereColumn: "F2", whereColumnEquals: 13); @@ -435,11 +430,11 @@ public void checkRAFwriting() { println("Writing in RAF mode ... "); - if (File.Exists(TestRAFPath)) + if (File.Exists(TestRAFPath())) { - File.Delete(TestRAFPath); + File.Delete(TestRAFPath()); } - using (var writer = new DBFWriter(TestRAFPath)) + using (var writer = new DBFWriter(TestRAFPath())) { var fields = new DBFField[2]; @@ -458,7 +453,7 @@ public void checkRAFwriting() println("Appending to this file"); - using (var writer = new DBFWriter(TestRAFPath)) + using (var writer = new DBFWriter(TestRAFPath())) { writer.WriteRecord("Green", 33); @@ -470,11 +465,11 @@ public void checkRAFwriting() [Test] public void ShowPaths() { - println(TestPath); + println(TestPath()); - println(TestRAFPath); + println(TestRAFPath()); - println(TestClipLongPath); + println(TestClipLongPath()); } [Test] @@ -485,11 +480,11 @@ public void Test() File.Open(@"f:\st\dev\testdata\p.dbf", FileMode.OpenOrCreate, FileAccess.ReadWrite)) + using (var reader = new DBFReader(fis) + { + DataMemoLoc = Path.ChangeExtension(@"f:\st\dev\testdata\p.dbf", "DBT") + }) { - var reader = new DBFReader(fis) - { - DataMemoLoc = Path.ChangeExtension(@"f:\st\dev\testdata\p.dbf", "DBT") - }; var readValues = reader.NextRecord(); Console.WriteLine(readValues); @@ -517,14 +512,14 @@ public void test3() ReadSample(); } - public void WriteSample() + public void WriteSample([CallerMemberName] string name = null) { var field = new DBFField {Name = "F1", DataType = NativeDbType.Numeric}; var writer = new DBFWriter {Fields = new[] {field}}; writer.AddRecord(3); using ( Stream fos = - File.Open(TestPath, + File.Open(TestPath(name), FileMode.OpenOrCreate, FileAccess.ReadWrite)) { @@ -533,9 +528,9 @@ public void WriteSample() } - public void ReadSample() + public void ReadSample([CallerMemberName] string name = null) { - using (var reader = new DBFReader(TestPath)) + using (var reader = new DBFReader(TestPath(name))) { Assert.That(reader.RecordCount, EqualTo(1)); } diff --git a/DotNetDBF/DBFFieldType.cs b/DotNetDBF/DBFFieldType.cs index 1b1a118..52a3281 100644 --- a/DotNetDBF/DBFFieldType.cs +++ b/DotNetDBF/DBFFieldType.cs @@ -13,6 +13,7 @@ This file is part of DotNetDBF packege. using System.Data; + namespace DotNetDBF { public enum NativeDbType : byte diff --git a/DotNetDBF/DBFReader.cs b/DotNetDBF/DBFReader.cs index c4fdeb4..75b3b20 100644 --- a/DotNetDBF/DBFReader.cs +++ b/DotNetDBF/DBFReader.cs @@ -25,8 +25,8 @@ public class DBFReader : DBFBase, IDisposable { private BinaryReader _dataInputStream; private DBFHeader _header; + private Stream _dataMemo; private string _dataMemoLoc; - private int[] _selectFields = new int[] {}; private int[] _orderedSelectFields = new int[] {}; /* Class specific variables */ @@ -50,7 +50,7 @@ public void SetSelectFields(params string[] aParams) aParams.Select( it => Array.FindIndex(_header.FieldArray, - jt => jt.Name.Equals(it, StringComparison.InvariantCultureIgnoreCase))).ToArray(); + jt => jt.Name.Equals(it, StringComparison.OrdinalIgnoreCase))).ToArray(); _orderedSelectFields = _selectFields.OrderBy(it => it).ToArray(); } @@ -61,6 +61,8 @@ public DBFField[] GetSelectFields() : _header.FieldArray; } +#if NET35 + public DBFReader(string anIn) { try @@ -96,6 +98,7 @@ public DBFReader(string anIn) throw new DBFException("Failed To Read DBF", ex); } } +#endif public DBFReader(Stream anIn) { @@ -148,11 +151,39 @@ public void Dispose() #endregion +#if NET35 public string DataMemoLoc { get { return _dataMemoLoc; } set { _dataMemoLoc = value; } } +#endif + + public delegate Stream LazyStream(); + + private Stream loadedStream; + private LazyStream GetLazyStreamFromLocation() + { +#if NET35 + if (_dataMemo == null && !String.IsNullOrEmpty(_dataMemoLoc)) + { + return () => loadedStream ?? + (loadedStream = File.Open(_dataMemoLoc, FileMode.Open, FileAccess.Read, + FileShare.Read)); + }else +#endif + if (_dataMemo != null) + { + return () => _dataMemo; + } + return null; + } + + public Stream DataMemo + { + get { return _dataMemo; } + set { _dataMemo = value; } + } public override String ToString() { @@ -174,7 +205,14 @@ public override String ToString() public void Close() { +#if NET35 + _dataInputStream.Close(); +#else + _dataInputStream.Dispose(); +#endif + + _isClosed = true; } @@ -308,7 +346,8 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn && tLast != DBFFieldType.Unknown) { recordObjects[i] = Double.Parse(tParsed, - NumberStyles.Float | NumberStyles.AllowLeadingWhite, NumberFormatInfo.InvariantInfo); + NumberStyles.Float | NumberStyles.AllowLeadingWhite, + NumberFormatInfo.InvariantInfo); } else { @@ -341,7 +380,8 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn && tLast != DBFFieldType.Unknown) { recordObjects[i] = Decimal.Parse(tParsed, - NumberStyles.Float | NumberStyles.AllowLeadingWhite, NumberFormatInfo.InvariantInfo); + NumberStyles.Float | NumberStyles.AllowLeadingWhite, + NumberFormatInfo.InvariantInfo); } else { @@ -377,7 +417,7 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn break; case NativeDbType.Memo: - if (string.IsNullOrEmpty(_dataMemoLoc)) + if (String.IsNullOrEmpty(_dataMemoLoc) && _dataMemo == null) throw new Exception("Memo Location Not Set"); @@ -398,7 +438,7 @@ internal Object[] NextRecord(IEnumerable selectIndexes, IList sortedIn } - recordObjects[i] = new MemoValue(tBlock, this, _dataMemoLoc); + recordObjects[i] = new MemoValue(tBlock, this, _dataMemoLoc, GetLazyStreamFromLocation()); break; default: _dataInputStream.ReadBytes(_header.FieldArray[i].FieldLength); diff --git a/DotNetDBF/DBFWriter.cs b/DotNetDBF/DBFWriter.cs index 9d749d4..2372c59 100644 --- a/DotNetDBF/DBFWriter.cs +++ b/DotNetDBF/DBFWriter.cs @@ -14,6 +14,7 @@ original author (javadbf): anil@linuxense.com 2004/03/31 using System; using System.Collections; +using System.Collections.Generic; using System.IO; namespace DotNetDBF @@ -23,8 +24,9 @@ public class DBFWriter : DBFBase, IDisposable private DBFHeader header; private Stream raf; private int recordCount; - private ArrayList v_records = new ArrayList(); + private List v_records = new List(); private string _dataMemoLoc; + private Stream _dataMemo; /// Creates an empty Object. public DBFWriter() @@ -32,6 +34,9 @@ public DBFWriter() header = new DBFHeader(); } +#if NET35 + + /// Creates a DBFWriter which can append to records to an existing DBF file. /// @param dbfFile. The file passed in shouls be a valid DBF file. /// @exception Throws DBFException if the passed in file does exist but not a valid DBF file, or if an IO error occurs. @@ -44,7 +49,7 @@ public DBFWriter(String dbfFile) FileMode.OpenOrCreate, FileAccess.ReadWrite); - _dataMemoLoc = Path.ChangeExtension(dbfFile, "dbt"); + DataMemoLoc = Path.ChangeExtension(dbfFile, "dbt"); /* before proceeding check whether the passed in File object is an empty/non-existent file or not. @@ -72,6 +77,7 @@ is an empty/non-existent file or not. } recordCount = header.NumberOfRecords; } +#endif public DBFWriter(Stream dbfFile) { @@ -103,10 +109,27 @@ public byte Signature set { header.Signature = value; } } +#if NET35 + public string DataMemoLoc { get { return _dataMemoLoc; } - set { _dataMemoLoc = value; } + set + { + _dataMemoLoc = value; + + _dataMemo?.Close(); + _dataMemo = File.Open(_dataMemoLoc, + FileMode.OpenOrCreate, + FileAccess.ReadWrite); + } + } +#endif + + public Stream DataMemo + { + get { return _dataMemo; } + set { _dataMemo = value; } } public byte LanguageDriver @@ -342,8 +365,22 @@ public void Close() header.Write(new BinaryWriter(raf)); raf.Seek(0, SeekOrigin.End); raf.WriteByte(DBFFieldType.EndOfData); +#if NET35 raf.Close(); +#else + raf.Dispose(); +#endif } + +#if NET35 + + + if (!String.IsNullOrEmpty(DataMemoLoc)) + { + DataMemo.Close(); + } +#endif + } private void WriteRecord(BinaryWriter dataOutput, Object[] objectArray) diff --git a/DotNetDBF/DotNetDBF.csproj b/DotNetDBF/DotNetDBF.csproj index ec87c66..c79e46c 100644 --- a/DotNetDBF/DotNetDBF.csproj +++ b/DotNetDBF/DotNetDBF.csproj @@ -1,11 +1,11 @@  - net35 + net35;netstandard1.3 True sn.snk - 3.1.11 - 3.1.11.0 - 3.1.11.0 + 5.0.0.0 + 5.0.0.0 + 5.0.0.0 Ekon Benefits Copyright 2009-2017 This is a basic file parser for reading and writing xBase DBF files particularlly Clipper. Code originally derived from javadbf. @@ -20,6 +20,12 @@ True True + + + + + + diff --git a/DotNetDBF/MemoValue.cs b/DotNetDBF/MemoValue.cs index ab3be10..d159cab 100644 --- a/DotNetDBF/MemoValue.cs +++ b/DotNetDBF/MemoValue.cs @@ -19,12 +19,13 @@ public MemoValue(string aValue) } - internal MemoValue(long block, DBFBase aBase, string fileLoc) + internal MemoValue(long block, DBFBase aBase, string fileLoc, DBFReader.LazyStream fileStream) { _block = block; _base = aBase; _fileLoc = fileLoc; - _lockName = $"DotNetDBF.Memo.read.{_fileLoc}.{_block}."; + _fileStream = fileStream; + _lockName = $"DotNetDBF.Memo.read.{_fileLoc?? Guid.NewGuid().ToString() }.{_block}."; } private readonly DBFBase _base; @@ -32,6 +33,7 @@ internal MemoValue(long block, DBFBase aBase, string fileLoc) private long _block; private readonly string _fileLoc; private string _value; + private readonly DBFReader.LazyStream _fileStream; internal long Block => _block; @@ -41,21 +43,19 @@ internal void Write(DBFWriter aBase) { if (!_new) return; - if (string.IsNullOrEmpty(aBase.DataMemoLoc)) - throw new Exception("No Memo Location Set"); - var raf = - File.Open(aBase.DataMemoLoc, - FileMode.OpenOrCreate, - FileAccess.ReadWrite); + var raf = aBase.DataMemo; /* before proceeding check whether the passed in File object is an empty/non-existent file or not. */ - - - using (var tWriter = new BinaryWriter(raf, aBase.CharEncoding)) + if (raf == null) { + throw new InvalidDataException("Null Memo Field Stream from Writer"); + } + + var tWriter = new BinaryWriter(raf, aBase.CharEncoding); //Don't close the stream could be used else where; + if (raf.Length == 0) { var tHeader = new DBTHeader(); @@ -81,7 +81,7 @@ is an empty/non-existent file or not. tWriter.Write(tData); if (tNewDiff != 0) tWriter.Seek(aBase.BlockSize - (tDataLength % aBase.BlockSize), SeekOrigin.Current); - } + } } @@ -94,11 +94,8 @@ public string Value { if (!_new && !_loaded) { - using (var reader = new BinaryReader( - File.Open(_fileLoc, - FileMode.Open, - FileAccess.Read, - FileShare.Read))) + var fileStream = _fileStream(); + using (var reader = new BinaryReader(fileStream)) { reader.BaseStream.Seek(_block * _base.BlockSize, SeekOrigin.Begin); string tString; @@ -111,7 +108,7 @@ public string Value var tData = reader.ReadBytes(_base.BlockSize); tString = _base.CharEncoding.GetString(tData); - tIndex = tString.IndexOf(MemoTerminator); + tIndex = tString.IndexOf(MemoTerminator, StringComparison.Ordinal); if (tIndex != -1) tString = tString.Substring(0, tIndex); tStringBuilder.Append(tString); From bdb7b5b82aad9b8dfdf6b9bfb8147528426a6dc9 Mon Sep 17 00:00:00 2001 From: jbtule Date: Mon, 27 Mar 2017 13:28:51 -0500 Subject: [PATCH 10/10] Better handling of new stream api for Memos --- DotNetDBF/DBFReader.cs | 14 ++++++++++---- DotNetDBF/DBFWriter.cs | 2 ++ DotNetDBF/DotNetDBF.csproj | 6 +++--- DotNetDBF/MemoValue.cs | 18 +++++++++++++----- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/DotNetDBF/DBFReader.cs b/DotNetDBF/DBFReader.cs index 75b3b20..d65707e 100644 --- a/DotNetDBF/DBFReader.cs +++ b/DotNetDBF/DBFReader.cs @@ -63,6 +63,7 @@ public DBFField[] GetSelectFields() #if NET35 + [Obsolete("Will need to open your own stream in later versions of .Net Framework")] public DBFReader(string anIn) { try @@ -152,6 +153,7 @@ public void Dispose() #endregion #if NET35 + [Obsolete("Will need to open your own stream and use DataMemo property in later versions of .Net Framework")] public string DataMemoLoc { get { return _dataMemoLoc; } @@ -161,14 +163,14 @@ public string DataMemoLoc public delegate Stream LazyStream(); - private Stream loadedStream; + private Stream _loadedStream; private LazyStream GetLazyStreamFromLocation() { #if NET35 if (_dataMemo == null && !String.IsNullOrEmpty(_dataMemoLoc)) { - return () => loadedStream ?? - (loadedStream = File.Open(_dataMemoLoc, FileMode.Open, FileAccess.Read, + return () => _loadedStream ?? + (_loadedStream = File.Open(_dataMemoLoc, FileMode.Open, FileAccess.Read, FileShare.Read)); }else #endif @@ -206,9 +208,13 @@ public override String ToString() public void Close() { #if NET35 - + + _loadedStream?.Close(); + _dataMemo?.Close(); _dataInputStream.Close(); #else + + _dataMemo?.Dispose(); _dataInputStream.Dispose(); #endif diff --git a/DotNetDBF/DBFWriter.cs b/DotNetDBF/DBFWriter.cs index 2372c59..58f9519 100644 --- a/DotNetDBF/DBFWriter.cs +++ b/DotNetDBF/DBFWriter.cs @@ -367,8 +367,10 @@ public void Close() raf.WriteByte(DBFFieldType.EndOfData); #if NET35 raf.Close(); + _dataMemo?.Close(); #else raf.Dispose(); + _dataMemo?.Dispose(); #endif } diff --git a/DotNetDBF/DotNetDBF.csproj b/DotNetDBF/DotNetDBF.csproj index c79e46c..9b7e888 100644 --- a/DotNetDBF/DotNetDBF.csproj +++ b/DotNetDBF/DotNetDBF.csproj @@ -3,9 +3,9 @@ net35;netstandard1.3 True sn.snk - 5.0.0.0 - 5.0.0.0 - 5.0.0.0 + 5.0.2.0 + 5.0.2.0 + 5.0.2.0 Ekon Benefits Copyright 2009-2017 This is a basic file parser for reading and writing xBase DBF files particularlly Clipper. Code originally derived from javadbf. diff --git a/DotNetDBF/MemoValue.cs b/DotNetDBF/MemoValue.cs index d159cab..41e4ef9 100644 --- a/DotNetDBF/MemoValue.cs +++ b/DotNetDBF/MemoValue.cs @@ -25,11 +25,18 @@ internal MemoValue(long block, DBFBase aBase, string fileLoc, DBFReader.LazyStre _base = aBase; _fileLoc = fileLoc; _fileStream = fileStream; - _lockName = $"DotNetDBF.Memo.read.{_fileLoc?? Guid.NewGuid().ToString() }.{_block}."; + if (String.IsNullOrEmpty(fileLoc)) + { + _lockName = fileStream(); + } + else + { + _lockName = $"DotNetDBF.Memo.read.{_fileLoc}"; + } } private readonly DBFBase _base; - private readonly string _lockName; + private readonly object _lockName; private long _block; private readonly string _fileLoc; private string _value; @@ -95,10 +102,11 @@ public string Value if (!_new && !_loaded) { var fileStream = _fileStream(); - using (var reader = new BinaryReader(fileStream)) + + var reader = new BinaryReader(fileStream); + { reader.BaseStream.Seek(_block * _base.BlockSize, SeekOrigin.Begin); - string tString; var tStringBuilder = new StringBuilder(); int tIndex; var tSoftReturn = _base.CharEncoding.GetString(new byte[] {0x8d, 0x0a}); @@ -107,7 +115,7 @@ public string Value { var tData = reader.ReadBytes(_base.BlockSize); - tString = _base.CharEncoding.GetString(tData); + var tString = _base.CharEncoding.GetString(tData); tIndex = tString.IndexOf(MemoTerminator, StringComparison.Ordinal); if (tIndex != -1) tString = tString.Substring(0, tIndex);