Skip to content

Commit

Permalink
release
Browse files Browse the repository at this point in the history
  • Loading branch information
FolkerKinzel committed Dec 27, 2020
1 parent cde5149 commit e6c3ffe
Show file tree
Hide file tree
Showing 15 changed files with 182 additions and 53 deletions.
2 changes: 1 addition & 1 deletion Examples/Examples.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
<FileVersion>1.0.0.8</FileVersion>
<FileVersion>1.0.0.12</FileVersion>
</PropertyGroup>
<ItemGroup>
<None Include="..\.editorconfig" Link=".editorconfig" />
Expand Down
2 changes: 1 addition & 1 deletion Examples/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ static void Main()
// LinqOnCsvFile.TestLinqOnCsvFile();
// DisableCachingAndLinq.TestDisableCachingAndLinq();
// CsvToDataTable.TestCsvToDataTable();
ObjectFromCsv.TestObjectFromCsv();
// ObjectFromCsv.TestObjectFromCsv();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@
<IndentHtml>False</IndentHtml>
<BuildAssemblerVerbosity>OnlyWarningsAndErrors</BuildAssemblerVerbosity>
<SaveComponentCacheCapacity>100</SaveComponentCacheCapacity>
<HelpTitle>FolkerKinzel.CsvTools</HelpTitle>
<HelpTitle>FolkerKinzel.CsvTools 1.4.0</HelpTitle>
<HelpFileVersion>1.0.0.0</HelpFileVersion>
<RootNamespaceContainer>False</RootNamespaceContainer>
<NamespaceGrouping>True</NamespaceGrouping>
<NamespaceGrouping>False</NamespaceGrouping>
<MaximumGroupParts>6</MaximumGroupParts>
<Preliminary>False</Preliminary>
<SdkLinkTarget>Blank</SdkLinkTarget>
Expand All @@ -61,6 +61,8 @@
<CopyrightText>Copyright &amp;#169%3b 2020 Folker Kinzel</CopyrightText>
<ProjectSummary>Klassen zum Lesen und Schreiben von CSV-Dateien.</ProjectSummary>
<VisibleItems>ExplicitInterfaceImplementations, InheritedMembers, InheritedFrameworkMembers, Protected, ProtectedInternalAsProtected, NonBrowsable</VisibleItems>
<HeaderText>
</HeaderText>
</PropertyGroup>
<!-- There are no properties for these groups. AnyCPU needs to appear in order for Visual Studio to perform
the build. The others are optional common platform types that may appear. -->
Expand Down
Binary file modified FolkerKinzel.CsvTools.Doku.de/Help/FolkerKinzel.CsvTools.de.chm
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@
<IndentHtml>False</IndentHtml>
<BuildAssemblerVerbosity>OnlyWarningsAndErrors</BuildAssemblerVerbosity>
<SaveComponentCacheCapacity>100</SaveComponentCacheCapacity>
<HelpTitle>FolkerKinzel.CsvTools</HelpTitle>
<HelpTitle>FolkerKinzel.CsvTools 1.4.0</HelpTitle>
<HelpFileVersion>1.0.0.0</HelpFileVersion>
<RootNamespaceContainer>False</RootNamespaceContainer>
<NamespaceGrouping>True</NamespaceGrouping>
<NamespaceGrouping>False</NamespaceGrouping>
<MaximumGroupParts>6</MaximumGroupParts>
<Preliminary>False</Preliminary>
<SdkLinkTarget>Blank</SdkLinkTarget>
Expand Down
Binary file not shown.
15 changes: 15 additions & 0 deletions FolkerKinzel.CsvTools/AutoColumnName.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;

namespace FolkerKinzel.CsvTools
{
internal static class AutoColumnName
{
private const string DefaultKeyName = "Column";

internal static string Create(int index) => DefaultKeyName + (index + 1).ToString(CultureInfo.InvariantCulture);

}
}
5 changes: 2 additions & 3 deletions FolkerKinzel.CsvTools/CsvRecord.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ public sealed class CsvRecord : IEnumerable<KeyValuePair<string, string?>>
{
#region fields

private const string DefaultKeyName = "Column";
#if NET40
private static readonly string?[] DefaultArr = new string?[0];
private readonly string?[] _values = DefaultArr;
Expand Down Expand Up @@ -80,7 +79,7 @@ internal CsvRecord(int columnsCount, bool caseSensitive, bool initArr)

for (int i = 0; i < columnsCount; i++)
{
string keyName = DefaultKeyName + (i + 1).ToString(CultureInfo.InvariantCulture);
string keyName = AutoColumnName.Create(i);

keyArr[i] = keyName;
this._lookupDictionary.Add(keyName, i);
Expand Down Expand Up @@ -166,7 +165,7 @@ string GetDefaultName()

do
{
key = DefaultKeyName + (++defaultNameCounter).ToString(CultureInfo.InvariantCulture);
key = AutoColumnName.Create(defaultNameCounter++);
} while (_lookupDictionary.ContainsKey(key));

return key;
Expand Down
2 changes: 1 addition & 1 deletion FolkerKinzel.CsvTools/Exceptions/InvalidCsvException.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
namespace FolkerKinzel.CsvTools
{
/// <summary>
/// Ausnahmen, die beim Lesen von Csv-Dokumenten durch ungültige CSV-Dokumente
/// Ausnahmen, die beim Lesen von CSV-Dokumenten durch ungültige CSV-Dokumente
/// ausgelöst werden.
/// </summary>
[Serializable]
Expand Down
7 changes: 4 additions & 3 deletions FolkerKinzel.CsvTools/FolkerKinzel.CsvTools.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,11 @@
<!-- .nuget-Package: -->
<PackageId>FolkerKinzel.CsvTools</PackageId>
<Product>FolkerKinzel.CsvTools</Product>
<Version>1.3.1</Version>
<FileVersion>1.3.1.62</FileVersion>
<Version>1.4.0</Version>
<FileVersion>1.4.0.1</FileVersion>
<AssemblyVersion>1.0.0.0</AssemblyVersion>
<PackageReleaseNotes>More English IntelliSense.</PackageReleaseNotes>
<PackageReleaseNotes>Added FolkerKinzel.CsvTools.Helpers.CsvIndexProperty class for easier reading and writing CSV files without header.
Complete IntelliSense and project reference in English and German.</PackageReleaseNotes>
<PackageTags>csv</PackageTags>
<Description>.NET-library to read and write CSV-files.</Description>
<Authors>Folker Kinzel</Authors>
Expand Down
47 changes: 47 additions & 0 deletions FolkerKinzel.CsvTools/Helpers/CsvIndexProperty.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using FolkerKinzel.CsvTools.Helpers.Converters;
using System;
using System.Collections.Generic;
using System.Text;

namespace FolkerKinzel.CsvTools.Helpers
{
/// <summary>
/// Spezialisierung der <see cref="CsvProperty"/>-Klasse zur Bearbeitung von CSV-Dateien ohne Kopfzeile.
/// </summary>
public sealed class CsvIndexProperty : CsvProperty, ICloneable
{
private CsvIndexProperty(CsvIndexProperty source) : base(source)
{

}

#pragma warning disable 1573
/// <inheritdoc cref="CsvProperty.CsvProperty(string, IEnumerable{string}, ICsvTypeConverter, int)"
/// path="param[@name='propertyName']|param[@name='converter']|param[@name='wildcardTimeout']|exception"/>
/// <summary>
/// Initialisiert ein <see cref="CsvIndexProperty"/>-Objekt.
/// </summary>
/// <param name="csvColumnIndex">Nullbasierter Index der Spalte der CSV-Datei.</param>
/// <exception cref="ArgumentNullException"><paramref name="propertyName"/> oder
/// <paramref name="converter"/> ist <c>null</c>.</exception>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="csvColumnIndex"/> ist kleiner als 0 - oder -
/// <paramref name="wildcardTimeout"/> ist kleiner als 1 oder größer als
/// <see cref="CsvProperty.MaxWildcardTimeout"/>.</exception>
public CsvIndexProperty(
string propertyName, int csvColumnIndex, ICsvTypeConverter converter, int wildcardTimeout = 10) :
base(propertyName, new string[] { AutoColumnName.Create(csvColumnIndex) }, converter, wildcardTimeout)
{
if(csvColumnIndex < 0)
{
throw new ArgumentOutOfRangeException(nameof(csvColumnIndex));
}
}

#pragma warning restore 1573


/// <inheritdoc path="summary|returns"/>
public override object Clone() => new CsvIndexProperty(this);

}
}
34 changes: 33 additions & 1 deletion FolkerKinzel.CsvTools/Helpers/CsvProperty.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,16 @@ namespace FolkerKinzel.CsvTools.Helpers
/// <see cref="CsvProperty"/> kapselt Informationen über Zugriff und die Typkonvertierung, die <see cref="CsvRecordWrapper"/> benötigt,
/// um auf die Daten des ihm zugrundeliegenden <see cref="CsvRecord"/>-Objekts zuzugreifen.
/// </summary>
public sealed class CsvProperty
/// <remarks>
/// <note type="important">
/// Es ist nicht empfehlenswert, dasselbe <see cref="CsvProperty"/>-Objekt zum Lesen von
/// CSV-Dateien mit verschiedenen Kopfzeilen zu verwenden - selbst wenn die zugewiesenen Spalten-Aliase dies ermöglichen würden.
/// Der Grund dafür ist, dass beim ersten Lesen der geeignetste Alias ausgesucht und dann für alle
/// nachfolgenden Lesevorgänge verwendet wird. Die Methode <see cref="Clone"/> erstellt eine frische
/// Kopie des <see cref="CsvProperty"/>-Objekts, die zum Lesen einer anderen CSV-Datei verwendet werden kann.
/// </note>
/// </remarks>
public class CsvProperty : ICloneable
{
/// <summary>
/// Maximale Zeit (in Millisekunden) die für das Auflösen eines Spaltennamen-Aliases aufgewendet werden kann.
Expand All @@ -25,6 +34,17 @@ public sealed class CsvProperty
private ColumnAliasesLookup? _lookup;
private readonly int _wildcardTimeout;

/// <summary>
/// Kopierkonstruktor
/// </summary>
/// <param name="source"><see cref="CsvProperty"/>-Objekt, das kopiert wird.</param>
protected CsvProperty(CsvProperty source)
{
this.PropertyName = source.PropertyName;
this.ColumnNameAliases = source.ColumnNameAliases;
this.Converter = source.Converter;
this._wildcardTimeout = source._wildcardTimeout;
}

/// <summary>
/// Initialisiert ein <see cref="CsvProperty"/>-Objekt.
Expand Down Expand Up @@ -174,6 +194,18 @@ internal void SetValue(CsvRecord? record, object? value)
}


/// <inheritdoc/>
/// <remarks>
/// Es ist nicht empfehlenswert, dasselbe <see cref="CsvProperty"/>-Objekt zum Lesen von
/// CSV-Dateien mit verschiedenen Kopfzeilen zu verwenden - selbst wenn die zugewiesenen Spalten-Aliase dies ermöglichen würden.
/// Der Grund dafür ist, dass beim ersten Lesen der geeignetste Alias ausgesucht und dann für alle
/// nachfolgenden Lesevorgänge verwendet wird. Die Methode <see cref="Clone"/> erstellt eine frische
/// Kopie des <see cref="CsvProperty"/>-Objekts, die zum Lesen einer anderen CSV-Datei verwendet werden kann.
/// </remarks>
public virtual object Clone() => new CsvProperty(this);



/////////////////////////////////////////////////////////////////////

private class ColumnAliasesLookup
Expand Down
9 changes: 8 additions & 1 deletion FolkerKinzel.CsvTools/Helpers/CsvRecordWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ namespace FolkerKinzel.CsvTools.Helpers
/// deklariert ist.
/// </summary>
/// <remarks>
/// <note type="important">
/// Es ist nicht empfehlenswert, dieselben <see cref="CsvProperty"/>-Objekte zum Lesen von
/// CSV-Dateien mit verschiedenen Kopfzeilen zu verwenden - selbst wenn die zugewiesenen Spalten-Aliase dies ermöglichen würden.
/// Der Grund dafür ist, dass beim ersten Lesen der geeignetste Alias ausgesucht und dann für alle
/// nachfolgenden Lesevorgänge verwendet wird. Die Methode <see cref="CsvProperty.Clone">CsvProperty.Clone()</see> erstellt eine frische
/// Kopie eines <see cref="CsvProperty"/>-Objekts, die zum Lesen einer anderen CSV-Datei verwendet werden kann.
/// </note>
/// <para>Nachdem ein <see cref="CsvRecordWrapper"/>-Objekt initialisiert wurde, müssen bei ihm mit der Methode
/// <see cref="AddProperty(CsvProperty)"/>&#160;<see cref="CsvProperty"/>-Objekte registriert werden, die dynamische Eigenschaften
/// des <see cref="CsvRecordWrapper"/>-Objekts darstellen und Typkonvertierungen für die im zugrundeliegenden <see cref="CsvRecord"/>-Objekt
Expand Down Expand Up @@ -66,7 +73,7 @@ namespace FolkerKinzel.CsvTools.Helpers
/// </para>
/// </remarks>
/// <example>
/// <note type="important">In den folgenden Code-Beispielen wurde - der leichteren Lesbarkeit wegen - auf Ausnahmebehandlung verzichtet.</note>
/// <note type="note">In den folgenden Code-Beispielen wurde - der leichteren Lesbarkeit wegen - auf Ausnahmebehandlung verzichtet.</note>
/// <para>Speichern des Inhalts einer <see cref="DataTable"/> als CSV-Datei und Einlesen von Daten einer CSV-Datei in
/// eine <see cref="DataTable"/>:</para>
/// <code language="cs" source="..\Examples\CsvToDataTable.cs"/>
Expand Down
Loading

0 comments on commit e6c3ffe

Please sign in to comment.