Import dotnetDBF for error handling.
This commit is contained in:
43
DotNetDBF.Test/DotNetDBF.Test.csproj
Normal file
43
DotNetDBF.Test/DotNetDBF.Test.csproj
Normal file
@@ -0,0 +1,43 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netcoreapp2.0;net462</TargetFrameworks>
|
||||
<OutputType Condition="'$(TargetFramework)'!='netcoreapp2.0'">Exe</OutputType>
|
||||
<Copyright>Copyright © 2017</Copyright>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NUnit" Version="3.7.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="3.8.*" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.*" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="dbfs\cp1251.dbf" />
|
||||
<EmbeddedResource Include="dbfs\dbase_03.dbf" />
|
||||
<EmbeddedResource Include="dbfs\dbase_30.dbf" />
|
||||
<EmbeddedResource Include="dbfs\dbase_30.fpt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_31.dbf" />
|
||||
<EmbeddedResource Include="dbfs\dbase_83.dbf" />
|
||||
<EmbeddedResource Include="dbfs\dbase_83.dbt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_83_missing_memo.dbf" />
|
||||
<EmbeddedResource Include="dbfs\dbase_83_missing_memo_record_0.yml" />
|
||||
<EmbeddedResource Include="dbfs\dbase_83_record_0.yml" />
|
||||
<EmbeddedResource Include="dbfs\dbase_83_record_9.yml" />
|
||||
<EmbeddedResource Include="dbfs\dbase_8b.dbf" />
|
||||
<EmbeddedResource Include="dbfs\dbase_8b.dbt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_f5.dbf" />
|
||||
<EmbeddedResource Include="dbfs\dbase_f5.fpt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\DotNetDBF.Enumerable\DotNetDBF.Enumerable.csproj" />
|
||||
<ProjectReference Include="..\DotNetDBF\DotNetDBF.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Include="dbfs\cp1251_summary.txt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_03_summary.txt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_30_summary.txt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_31_summary.txt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_83_schema.txt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_83_summary.txt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_8b_summary.txt" />
|
||||
<EmbeddedResource Include="dbfs\dbase_f5_summary.txt" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
31
DotNetDBF.Test/Issue19Test.cs
Normal file
31
DotNetDBF.Test/Issue19Test.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace DotNetDBF.Test
|
||||
{
|
||||
|
||||
[TestFixture]
|
||||
public class Issue19Test
|
||||
{
|
||||
private Stream DbfsData(string filename) => typeof(Issue19Test).Assembly
|
||||
.GetManifestResourceStream($"{nameof(DotNetDBF)}.{nameof(Test)}.dbfs.{filename}");
|
||||
|
||||
[Test]
|
||||
public void ReadTest()
|
||||
{
|
||||
using (var dbfstream = DbfsData("dbase_8b.dbf"))
|
||||
using (var memoStream = DbfsData("dbase_8b.dbt"))
|
||||
using (DBFReader dbfr = new DBFReader(dbfstream) { DataMemo = memoStream})
|
||||
{
|
||||
object[] record = dbfr.NextRecord();
|
||||
//This line would hang issue #19 https://github.com/ekonbenefits/dotnetdbf/issues/19
|
||||
Assert.Throws<DBTException>(() => record[5].ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
DotNetDBF.Test/Program.cs
Normal file
16
DotNetDBF.Test/Program.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace DotNetDBF.Test
|
||||
{
|
||||
#if !NETCOREAPP2_0
|
||||
public class Program
|
||||
{
|
||||
public static void Main()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
11
DotNetDBF.Test/Properties/AssemblyInfo.cs
Normal file
11
DotNetDBF.Test/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 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")]
|
||||
544
DotNetDBF.Test/Test.cs
Normal file
544
DotNetDBF.Test/Test.cs
Normal file
@@ -0,0 +1,544 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
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([CallerMemberName] string name = null)
|
||||
=> Path.Combine(Path.GetTempPath(), name + "_121212.dbf");
|
||||
|
||||
private string TestRAFPath([CallerMemberName] string name = null)
|
||||
=> Path.Combine(Path.GetTempPath(), name + "_raf-1212.dbf");
|
||||
|
||||
|
||||
private string TestClipLongPath([CallerMemberName] string name = null)
|
||||
=> Path.Combine(Path.GetTempPath(), name + "_cliplong.dbf");
|
||||
|
||||
private string TestMemoPath([CallerMemberName] string name = null)
|
||||
=> Path.Combine(Path.GetTempPath(), name + "_clipmemo.dbf");
|
||||
|
||||
private string TestSelectPath([CallerMemberName] string name = null)
|
||||
=> Path.Combine(Path.GetTempPath(), name + "_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))
|
||||
using (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.Open,
|
||||
FileAccess.Read))
|
||||
using (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))
|
||||
using (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))
|
||||
using (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))
|
||||
using (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))
|
||||
using (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))
|
||||
{
|
||||
using (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))
|
||||
{
|
||||
using (var reader = new DBFReader(fis)
|
||||
{
|
||||
DataMemoLoc = Path.ChangeExtension(TestSelectPath(), "DBT")
|
||||
})
|
||||
{
|
||||
|
||||
var readValues = reader.AllRecords<ITestInterface>();
|
||||
|
||||
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))
|
||||
using (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))
|
||||
using (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))
|
||||
using (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))
|
||||
using (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([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(name),
|
||||
FileMode.OpenOrCreate,
|
||||
FileAccess.ReadWrite))
|
||||
{
|
||||
writer.Write(fos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void ReadSample([CallerMemberName] string name = null)
|
||||
{
|
||||
using (var reader = new DBFReader(TestPath(name)))
|
||||
{
|
||||
Assert.That(reader.RecordCount, EqualTo(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
22
DotNetDBF.Test/dbfs/Readme.md
Normal file
22
DotNetDBF.Test/dbfs/Readme.md
Normal file
@@ -0,0 +1,22 @@
|
||||
Most of the DBFs here are from the spec directory of the dbf ruby gem
|
||||
|
||||
Copyright (c) 2006-2017 Keith Morrison <keithm@infused.org>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
BIN
DotNetDBF.Test/dbfs/cp1251.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/cp1251.dbf
Normal file
Binary file not shown.
11
DotNetDBF.Test/dbfs/cp1251_summary.txt
Normal file
11
DotNetDBF.Test/dbfs/cp1251_summary.txt
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
Database: cp1251.dbf
|
||||
Type: (30) Visual FoxPro
|
||||
Memo File: false
|
||||
Records: 4
|
||||
|
||||
Fields:
|
||||
Name Type Length Decimal
|
||||
------------------------------------------------------------------------------
|
||||
RN N 4 0
|
||||
NAME C 100 0
|
||||
BIN
DotNetDBF.Test/dbfs/dbase_03.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_03.dbf
Normal file
Binary file not shown.
40
DotNetDBF.Test/dbfs/dbase_03_summary.txt
Normal file
40
DotNetDBF.Test/dbfs/dbase_03_summary.txt
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
Database: dbase_03.dbf
|
||||
Type: (03) dBase III without memo file
|
||||
Memo File: false
|
||||
Records: 14
|
||||
|
||||
Fields:
|
||||
Name Type Length Decimal
|
||||
------------------------------------------------------------------------------
|
||||
Point_ID C 12 0
|
||||
Type C 20 0
|
||||
Shape C 20 0
|
||||
Circular_D C 20 0
|
||||
Non_circul C 60 0
|
||||
Flow_prese C 20 0
|
||||
Condition C 20 0
|
||||
Comments C 60 0
|
||||
Date_Visit D 8 0
|
||||
Time C 10 0
|
||||
Max_PDOP N 5 1
|
||||
Max_HDOP N 5 1
|
||||
Corr_Type C 36 0
|
||||
Rcvr_Type C 36 0
|
||||
GPS_Date D 8 0
|
||||
GPS_Time C 10 0
|
||||
Update_Sta C 36 0
|
||||
Feat_Name C 20 0
|
||||
Datafile C 20 0
|
||||
Unfilt_Pos N 10 0
|
||||
Filt_Pos N 10 0
|
||||
Data_Dicti C 20 0
|
||||
GPS_Week N 6 0
|
||||
GPS_Second N 12 3
|
||||
GPS_Height N 16 3
|
||||
Vert_Prec N 16 1
|
||||
Horz_Prec N 16 1
|
||||
Std_Dev N 16 6
|
||||
Northing N 16 3
|
||||
Easting N 16 3
|
||||
Point_ID N 9 0
|
||||
BIN
DotNetDBF.Test/dbfs/dbase_30.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_30.dbf
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/dbase_30.fpt
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_30.fpt
Normal file
Binary file not shown.
154
DotNetDBF.Test/dbfs/dbase_30_summary.txt
Normal file
154
DotNetDBF.Test/dbfs/dbase_30_summary.txt
Normal file
@@ -0,0 +1,154 @@
|
||||
|
||||
Database: dbase_30.dbf
|
||||
Type: (30) Visual FoxPro
|
||||
Memo File: true
|
||||
Records: 34
|
||||
|
||||
Fields:
|
||||
Name Type Length Decimal
|
||||
------------------------------------------------------------------------------
|
||||
ACCESSNO C 15 0
|
||||
ACQVALUE N 12 2
|
||||
APPNOTES M 4 0
|
||||
APPRAISOR C 75 0
|
||||
CABINET C 25 0
|
||||
CAPTION C 30 0
|
||||
CAT C 1 0
|
||||
CATBY C 25 0
|
||||
CATDATE D 8 0
|
||||
CATTYPE C 15 0
|
||||
CLASSES M 4 0
|
||||
COLLECTION C 75 0
|
||||
CONDDATE D 8 0
|
||||
CONDEXAM C 25 0
|
||||
CONDITION C 35 0
|
||||
CONDNOTES M 4 0
|
||||
CONTAINER C 40 0
|
||||
COPYRIGHT M 4 0
|
||||
CREATOR C 80 0
|
||||
CREDIT M 4 0
|
||||
CURVALMAX N 12 2
|
||||
CURVALUE N 12 2
|
||||
DATASET C 15 0
|
||||
DATE C 50 0
|
||||
DESCRIP M 4 0
|
||||
DIMNOTES M 4 0
|
||||
DISPVALUE C 10 0
|
||||
DRAWER C 20 0
|
||||
EARLYDATE N 4 0
|
||||
EVENT C 80 0
|
||||
EXHIBITID C 36 0
|
||||
EXHIBITNO N 7 0
|
||||
EXHLABEL1 M 4 0
|
||||
EXHLABEL2 M 4 0
|
||||
EXHLABEL3 M 4 0
|
||||
EXHLABEL4 M 4 0
|
||||
EXHSTART D 8 0
|
||||
FILMSIZE C 35 0
|
||||
FLAGDATE T 8 0
|
||||
FLAGNOTES M 4 0
|
||||
FLAGREASON C 20 0
|
||||
FRAME C 75 0
|
||||
FRAMENO C 25 0
|
||||
GPARENT C 45 0
|
||||
HOMELOC C 60 0
|
||||
IMAGEFILE C 60 0
|
||||
IMAGENO N 3 0
|
||||
INSCOMP C 30 0
|
||||
INSDATE D 8 0
|
||||
INSPHONE C 25 0
|
||||
INSPREMIUM C 20 0
|
||||
INSREP C 30 0
|
||||
INSVALUE N 10 2
|
||||
INVNBY C 25 0
|
||||
INVNDATE D 8 0
|
||||
LATEDATE N 4 0
|
||||
LEGAL M 4 0
|
||||
LOANCOND M 4 0
|
||||
LOANDATE D 8 0
|
||||
LOANDUE D 8 0
|
||||
LOANID C 36 0
|
||||
LOANINNO C 15 0
|
||||
MAINTCYCLE C 10 0
|
||||
MAINTDATE D 8 0
|
||||
MAINTNOTE M 4 0
|
||||
MEDIUM C 75 0
|
||||
NEGLOC C 60 0
|
||||
NEGNO C 25 0
|
||||
NOTES M 4 0
|
||||
OBJECTID C 25 0
|
||||
OBJNAME C 40 0
|
||||
OLDNO C 25 0
|
||||
ORIGCOPY C 15 0
|
||||
OTHERNO C 25 0
|
||||
OUTDATE D 8 0
|
||||
PARENT C 40 0
|
||||
PEOPLE M 4 0
|
||||
PLACE C 100 0
|
||||
POLICYNO C 20 0
|
||||
PRINTSIZE C 35 0
|
||||
PROCESS C 75 0
|
||||
PROVENANCE M 4 0
|
||||
PUBNOTES M 4 0
|
||||
RECAS C 20 0
|
||||
RECDATE C 10 0
|
||||
RECFROM C 120 0
|
||||
RELATION C 36 0
|
||||
RELNOTES M 4 0
|
||||
ROOM C 25 0
|
||||
SGFLAG C 1 0
|
||||
SHELF C 20 0
|
||||
SITE C 40 0
|
||||
SITENO C 12 0
|
||||
SLIDENO C 25 0
|
||||
STATUS C 20 0
|
||||
STATUSBY C 25 0
|
||||
STATUSDATE D 8 0
|
||||
STERMS M 4 0
|
||||
STUDIO C 60 0
|
||||
SUBJECTS M 4 0
|
||||
TCABINET C 25 0
|
||||
TCONTAINER C 40 0
|
||||
TDRAWER C 20 0
|
||||
TEMPAUTHOR C 25 0
|
||||
TEMPBY C 25 0
|
||||
TEMPDATE D 8 0
|
||||
TEMPLOC C 60 0
|
||||
TEMPNOTES M 4 0
|
||||
TEMPREASON C 50 0
|
||||
TEMPUNTIL C 10 0
|
||||
TITLE M 4 0
|
||||
TITLESORT C 100 0
|
||||
TROOM C 25 0
|
||||
TSHELF C 20 0
|
||||
TWALL C 20 0
|
||||
UDF1 C 75 0
|
||||
UDF10 C 75 0
|
||||
UDF11 C 20 0
|
||||
UDF12 C 20 0
|
||||
UDF13 N 12 0
|
||||
UDF14 N 12 2
|
||||
UDF15 N 12 2
|
||||
UDF16 N 12 3
|
||||
UDF17 N 12 3
|
||||
UDF18 D 8 0
|
||||
UDF19 D 8 0
|
||||
UDF20 D 8 0
|
||||
UDF21 M 4 0
|
||||
UDF22 M 4 0
|
||||
UDF2 C 75 0
|
||||
UDF3 C 75 0
|
||||
UDF4 C 75 0
|
||||
UDF5 C 75 0
|
||||
UDF6 C 75 0
|
||||
UDF7 C 75 0
|
||||
UDF8 C 75 0
|
||||
UDF9 C 75 0
|
||||
UPDATED T 8 0
|
||||
UPDATEDBY C 25 0
|
||||
VALUEDATE D 8 0
|
||||
WALL C 20 0
|
||||
WEBINCLUDE L 1 0
|
||||
ZSORTER C 69 0
|
||||
ZSORTERX C 44 0
|
||||
PPID C 36 0
|
||||
BIN
DotNetDBF.Test/dbfs/dbase_31.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_31.dbf
Normal file
Binary file not shown.
20
DotNetDBF.Test/dbfs/dbase_31_summary.txt
Normal file
20
DotNetDBF.Test/dbfs/dbase_31_summary.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
Database: dbase_31.dbf
|
||||
Type: (31) Visual FoxPro with AutoIncrement field
|
||||
Memo File: false
|
||||
Records: 77
|
||||
|
||||
Fields:
|
||||
Name Type Length Decimal
|
||||
------------------------------------------------------------------------------
|
||||
PRODUCTID I 4 0
|
||||
PRODUCTNAM C 40 0
|
||||
SUPPLIERID I 4 0
|
||||
CATEGORYID I 4 0
|
||||
QUANTITYPE C 20 0
|
||||
UNITPRICE Y 8 4
|
||||
UNITSINSTO I 4 0
|
||||
UNITSONORD I 4 0
|
||||
REORDERLEV I 4 0
|
||||
DISCONTINU L 1 0
|
||||
_NullFlags 0 1 0
|
||||
BIN
DotNetDBF.Test/dbfs/dbase_83.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_83.dbf
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/dbase_83.dbt
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_83.dbt
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/dbase_83_missing_memo.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_83_missing_memo.dbf
Normal file
Binary file not shown.
16
DotNetDBF.Test/dbfs/dbase_83_missing_memo_record_0.yml
Normal file
16
DotNetDBF.Test/dbfs/dbase_83_missing_memo_record_0.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
- 87
|
||||
- 2
|
||||
- 0
|
||||
- 0
|
||||
- 87
|
||||
- '1'
|
||||
- Assorted Petits Fours
|
||||
- graphics/00000001/t_1.jpg
|
||||
- graphics/00000001/1.jpg
|
||||
- 0.0
|
||||
- 0.0
|
||||
-
|
||||
- 5.51
|
||||
- true
|
||||
- true
|
||||
16
DotNetDBF.Test/dbfs/dbase_83_record_0.yml
Normal file
16
DotNetDBF.Test/dbfs/dbase_83_record_0.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
- 87
|
||||
- 2
|
||||
- 0
|
||||
- 0
|
||||
- 87
|
||||
- '1'
|
||||
- Assorted Petits Fours
|
||||
- graphics/00000001/t_1.jpg
|
||||
- graphics/00000001/1.jpg
|
||||
- 0.0
|
||||
- 0.0
|
||||
- "Our Original assortment...a little taste of heaven for everyone. Let us\r\nselect a special assortment of our chocolate and pastel favorites for you.\r\nEach petit four is its own special hand decorated creation. Multi-layers of\r\nmoist cake with combinations of specialty fillings create memorable cake\r\nconfections. Varietes include; Luscious Lemon, Strawberry Hearts, White\r\nChocolate, Mocha Bean, Roasted Almond, Triple Chocolate, Chocolate Hazelnut,\r\nGrand Orange, Plum Squares, Milk chocolate squares, and Raspberry Blanc."
|
||||
- 5.51
|
||||
- true
|
||||
- true
|
||||
23
DotNetDBF.Test/dbfs/dbase_83_record_9.yml
Normal file
23
DotNetDBF.Test/dbfs/dbase_83_record_9.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
- 34
|
||||
- 1
|
||||
- 0
|
||||
- 0
|
||||
- 34
|
||||
- AB01
|
||||
- Apricot Brandy Fruitcake
|
||||
- graphics/00000001/t_AB01.jpg
|
||||
- graphics/00000001/AB01.jpg
|
||||
- 37.95
|
||||
- 37.95
|
||||
- "Once tasted you will understand why we won The\r\nBoston Herald's Fruitcake Taste-off.
|
||||
Judges liked its generous size,\r\nluscious appearance, moist texture and fruit
|
||||
to cake ratio ... commented one\r\njudge \"It's a lip Smacker!\" Our signature fruitcake
|
||||
is baked with carefully\r\nselected ingredients that will be savored until the last
|
||||
moist crumb is\r\ndevoured each golden slice is brimming with Australian glaced
|
||||
apricots,\r\ntoasted pecans, candied orange peel, and currants, folded gently into
|
||||
a\r\nbrandy butter batter and slowly baked to perfection and then generously\r\nimbibed
|
||||
with \"Holiday Spirits\". Presented in a gift tin. (3lbs. 4oz)"
|
||||
- 0.0
|
||||
- false
|
||||
- true
|
||||
19
DotNetDBF.Test/dbfs/dbase_83_schema.txt
Normal file
19
DotNetDBF.Test/dbfs/dbase_83_schema.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
ActiveRecord::Schema.define do
|
||||
create_table "dbase_83" do |t|
|
||||
t.column "id", :integer
|
||||
t.column "catcount", :integer
|
||||
t.column "agrpcount", :integer
|
||||
t.column "pgrpcount", :integer
|
||||
t.column "order", :integer
|
||||
t.column "code", :string, :limit => 50
|
||||
t.column "name", :string, :limit => 100
|
||||
t.column "thumbnail", :string, :limit => 254
|
||||
t.column "image", :string, :limit => 254
|
||||
t.column "price", :float
|
||||
t.column "cost", :float
|
||||
t.column "desc", :text
|
||||
t.column "weight", :float
|
||||
t.column "taxable", :boolean
|
||||
t.column "active", :boolean
|
||||
end
|
||||
end
|
||||
24
DotNetDBF.Test/dbfs/dbase_83_summary.txt
Normal file
24
DotNetDBF.Test/dbfs/dbase_83_summary.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
Database: dbase_83.dbf
|
||||
Type: (83) dBase III with memo file
|
||||
Memo File: true
|
||||
Records: 67
|
||||
|
||||
Fields:
|
||||
Name Type Length Decimal
|
||||
------------------------------------------------------------------------------
|
||||
ID N 19 0
|
||||
CATCOUNT N 19 0
|
||||
AGRPCOUNT N 19 0
|
||||
PGRPCOUNT N 19 0
|
||||
ORDER N 19 0
|
||||
CODE C 50 0
|
||||
NAME C 100 0
|
||||
THUMBNAIL C 254 0
|
||||
IMAGE C 254 0
|
||||
PRICE N 13 2
|
||||
COST N 13 2
|
||||
DESC M 10 0
|
||||
WEIGHT N 13 2
|
||||
TAXABLE L 1 0
|
||||
ACTIVE L 1 0
|
||||
BIN
DotNetDBF.Test/dbfs/dbase_8b.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_8b.dbf
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/dbase_8b.dbt
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_8b.dbt
Normal file
Binary file not shown.
15
DotNetDBF.Test/dbfs/dbase_8b_summary.txt
Normal file
15
DotNetDBF.Test/dbfs/dbase_8b_summary.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
|
||||
Database: dbase_8b.dbf
|
||||
Type: (8b) dBase IV with memo file
|
||||
Memo File: true
|
||||
Records: 10
|
||||
|
||||
Fields:
|
||||
Name Type Length Decimal
|
||||
------------------------------------------------------------------------------
|
||||
CHARACTER C 100 0
|
||||
NUMERICAL N 20 2
|
||||
DATE D 8 0
|
||||
LOGICAL L 1 0
|
||||
FLOAT F 20 18
|
||||
MEMO M 10 0
|
||||
BIN
DotNetDBF.Test/dbfs/dbase_f5.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_f5.dbf
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/dbase_f5.fpt
Normal file
BIN
DotNetDBF.Test/dbfs/dbase_f5.fpt
Normal file
Binary file not shown.
68
DotNetDBF.Test/dbfs/dbase_f5_summary.txt
Normal file
68
DotNetDBF.Test/dbfs/dbase_f5_summary.txt
Normal file
@@ -0,0 +1,68 @@
|
||||
|
||||
Database: dbase_f5.dbf
|
||||
Type: (f5) FoxPro with memo file
|
||||
Memo File: true
|
||||
Records: 975
|
||||
|
||||
Fields:
|
||||
Name Type Length Decimal
|
||||
------------------------------------------------------------------------------
|
||||
NF N 5 0
|
||||
SEXE C 1 0
|
||||
NOM C 20 0
|
||||
COG1 C 15 0
|
||||
COG2 C 15 0
|
||||
TELEFON C 9 0
|
||||
RENOM C 15 0
|
||||
NFP N 5 0
|
||||
NFM N 5 0
|
||||
ARXN C 10 0
|
||||
DATN D 8 0
|
||||
LLON C 15 0
|
||||
MUNN C 15 0
|
||||
COMN C 15 0
|
||||
PROV C 15 0
|
||||
PAIN C 15 0
|
||||
OFIC C 15 0
|
||||
ARXB C 10 0
|
||||
DATB D 8 0
|
||||
LLOB C 15 0
|
||||
MUNB C 15 0
|
||||
COMB C 15 0
|
||||
PAIB C 15 0
|
||||
DRIB C 30 0
|
||||
INAB C 30 0
|
||||
OFTB C 10 0
|
||||
OFNB C 20 0
|
||||
AXC1 C 10 0
|
||||
DTC1 D 8 0
|
||||
LLC1 C 15 0
|
||||
NFC1 N 5 0
|
||||
TCA1 C 10 0
|
||||
OTC1 C 10 0
|
||||
ONC1 C 20 0
|
||||
AXC2 C 10 0
|
||||
DTC2 D 8 0
|
||||
LLC2 C 15 0
|
||||
NFC2 N 5 0
|
||||
TCA2 C 10 0
|
||||
OTC2 C 10 0
|
||||
ONC2 C 20 0
|
||||
AXC3 C 10 0
|
||||
DTC3 D 8 0
|
||||
LLC3 C 15 0
|
||||
NFC3 N 5 0
|
||||
TCA3 C 10 0
|
||||
OTC3 C 10 0
|
||||
ONC3 C 20 0
|
||||
ARXD C 10 0
|
||||
DATD D 8 0
|
||||
LLOD C 15 0
|
||||
OFTD C 10 0
|
||||
OFND C 20 0
|
||||
OBS1 C 70 0
|
||||
OBS2 C 70 0
|
||||
OBS3 C 70 0
|
||||
OBS4 C 70 0
|
||||
OBSE M 10 0
|
||||
GHD C 15 0
|
||||
BIN
DotNetDBF.Test/dbfs/foxprodb/FOXPRO-DB-TEST.DBC
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/FOXPRO-DB-TEST.DBC
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/FOXPRO-DB-TEST.DCT
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/FOXPRO-DB-TEST.DCT
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/FOXPRO-DB-TEST.DCX
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/FOXPRO-DB-TEST.DCX
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/calls.CDX
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/calls.CDX
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/calls.FPT
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/calls.FPT
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/calls.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/calls.dbf
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/contacts.CDX
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/contacts.CDX
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/contacts.FPT
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/contacts.FPT
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/contacts.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/contacts.dbf
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/setup.CDX
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/setup.CDX
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/setup.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/setup.dbf
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/types.CDX
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/types.CDX
Normal file
Binary file not shown.
BIN
DotNetDBF.Test/dbfs/foxprodb/types.dbf
Normal file
BIN
DotNetDBF.Test/dbfs/foxprodb/types.dbf
Normal file
Binary file not shown.
Reference in New Issue
Block a user