/
githubmirror
/
PowerShell
Обзор
Документация
Войти
/
githubmirror
/
PowerShell
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/Microsoft.PowerShell.Commands.Utility/commands/utility/Csv.cs
111 строк
3 KB
xtqqczze
Seal internal types in `Microsoft.PowerShell.Commands.Utility` (#25892)
25 авг 2025, 08:22
Не верифицирован
25 авг 2025, 08:22
5b72eb5
Код
Авторство
О чём код?
// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using System.Collections.ObjectModel; namespace Microsoft.PowerShell.Commands { /// <summary> /// This class is used to parse CSV text. /// </summary> internal sealed class CSVHelper { internal CSVHelper(char delimiter) { Delimiter = delimiter; } /// <summary> /// Gets or sets the delimiter that separates the values. /// </summary> internal char Delimiter { get; } = ','; /// <summary> /// Parse a CSV string. /// </summary> /// <param name="csv"> /// String to be parsed. /// </param> internal Collection<string> ParseCsv(string csv) { Collection<string> result = new(); string tempString = string.Empty; csv = csv.Trim(); if (csv.Length == 0 || csv[0] == '#') { return result; } bool inQuote = false; for (int i = 0; i < csv.Length; i++) { char c = csv[i]; if (c == Delimiter) { if (!inQuote) { result.Add(tempString); tempString = string.Empty; } else { tempString += c; } } else { switch (c) { case '"': if (inQuote) { // If we are at the end of the string or the end of the segment, create a new value // Otherwise we have an error if (i == csv.Length - 1) { result.Add(tempString); tempString = string.Empty; inQuote = false; break; } if (csv[i + 1] == Delimiter) { result.Add(tempString); tempString = string.Empty; inQuote = false; i++; } else if (csv[i + 1] == '"') { tempString += '"'; i++; } else { inQuote = false; } } else { inQuote = true; } break; default: tempString += c; break; } } } if (tempString.Length > 0) { result.Add(tempString); } return result; } } }