Skip to content

Commit

Permalink
Do not support Escaping when using duplicateQualifier
Browse files Browse the repository at this point in the history
  • Loading branch information
RNoeldner committed Aug 3, 2023
1 parent cb8d3d6 commit a447f8b
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions Library/ClassLibraryCSV/CsvHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -529,14 +529,12 @@ InspectionResult defaultInspectionResult
var newCommentLine = await textReader.InspectLineCommentAsync(cancellationToken).ConfigureAwait(false);
inspectionResult.CommentLine = newCommentLine;
}

var newPrefix = inspectionResult.EscapePrefix;
if (guessEscapePrefix) // Dependent on SkipRows, FieldDelimiter and FieldQualifier
{
Logger.Information("Checking Escape Prefix");
using var textReader = await stream.GetTextReaderAsync(inspectionResult.CodePageId, inspectionResult.SkipRows, cancellationToken);
var newPrefix = await textReader.InspectEscapePrefixAsync(inspectionResult.FieldDelimiter, inspectionResult.FieldQualifier, cancellationToken);
changedEscapePrefix = (inspectionResult.EscapePrefix != newPrefix);
inspectionResult.EscapePrefix = newPrefix;
newPrefix = await textReader.InspectEscapePrefixAsync(inspectionResult.FieldDelimiter, inspectionResult.FieldQualifier, cancellationToken);
}

if (guessQualifier || guessDelimiter || guessNewLine)
Expand All @@ -547,19 +545,23 @@ InspectionResult defaultInspectionResult
{
cancellationToken.ThrowIfCancellationRequested();
Logger.Information("Checking Qualifier");
var qualifierTestResult = textReader.InspectQualifier(inspectionResult.FieldDelimiter, inspectionResult.EscapePrefix, new[] { '"', '\'' }, cancellationToken);
var qualifierTestResult = textReader.InspectQualifier(inspectionResult.FieldDelimiter, newPrefix, new[] { '"', '\'' }, cancellationToken);
changedFieldQualifier = inspectionResult.FieldQualifier != qualifierTestResult.QuoteChar;
inspectionResult.FieldQualifier = qualifierTestResult.QuoteChar;
inspectionResult.ContextSensitiveQualifier = !(qualifierTestResult.DuplicateQualifier || qualifierTestResult.EscapedQualifier);
inspectionResult.DuplicateQualifierToEscape = qualifierTestResult.DuplicateQualifier;

// In case we have DuplicateQualifier turn off EscapePrefix
if (inspectionResult.DuplicateQualifierToEscape)
newPrefix = char.MinValue;
}

if (guessDelimiter) // Dependent on SkipRows, FieldQualifier and EscapePrefix
{
cancellationToken.ThrowIfCancellationRequested();
Logger.Information("Checking Column Delimiter");
var delimiterDet = await textReader.InspectDelimiterAsync(
inspectionResult.FieldQualifier, inspectionResult.EscapePrefix, disallowedDelimiter, cancellationToken).ConfigureAwait(false);
inspectionResult.FieldQualifier, newPrefix, disallowedDelimiter, cancellationToken).ConfigureAwait(false);
if (delimiterDet.MagicKeyword)
inspectionResult.SkipRows++;
changedDelimiter = inspectionResult.FieldDelimiter != delimiterDet.Delimiter;
Expand All @@ -576,6 +578,10 @@ InspectionResult defaultInspectionResult
}
}

changedEscapePrefix = (inspectionResult.EscapePrefix != newPrefix);
if (changedEscapePrefix)
inspectionResult.EscapePrefix = newPrefix;

if (guessEscapePrefix && (changedDelimiter || changedFieldQualifier) && tryCount<5)
{
Logger.Information("Re-Checking: Field Delimiter or Field Qualifier changed");
Expand Down

0 comments on commit a447f8b

Please sign in to comment.