master
editor 3 months ago
commit 39cf6bdb09

@ -0,0 +1,96 @@
C#最小的CSV文件解析器
一、源码描述
C#最小的CSV文件解析器
环境VS2022 
二、功能介绍
用法如下:
using var sr = new StreamReader("test1.csv");
var parser = new SmallestCSV.SmallestCSVParser(sr);
// Set this to true if you don't care about preserving the quotes around fields.
// (Sometimes that is used to distinguish a null vs empty field.)
const bool removeEnclosingQuotes=false;
while (true) {
    List<string>? columns = parser.ReadNextRow(removeEnclosingQuotes:removeEnclosingQuotes);
    if (columns == null) {
        Console.WriteLine("End of file reached");
        break;
    }
    var prettyRow = System.Text.Json.JsonSerializer.Serialize(columns);
    Console.WriteLine($"Read row: {prettyRow}");
}
三、注意事项
ctrl+F5运行即可。
作者: coderbest
如需获得该源码的视频、更新等更多资料请访问: https://www.51aspx.com/Code/FileParser
------------------------------------------------------------------------------------------------
源码服务专家
官网: https://www.51aspx.com
讨论圈: https://club.51aspx.com/
平台声明:
1.51Aspx平台上提供下载的资源为免费、共享、商业三类源码,其中免费和共享源码仅供个人学习和研究使用,商业源码请在相应的授权许可条件下使用;
2.51Aspx平台对提供下载的软件及其它资源不拥有任何权利,其版权归属源码合法拥有者所有;
3.著作权人发现本网站载有侵害其合法权益的内容或作品,请与我们联系( 登录官网与客服反馈或发送邮件到support@51Aspx.com
4.51Aspx平台不保证提供的下载资源的准确性、安全性和完整性;
友情提示:
一般数据库文件默认在 DB_51Aspx 文件夹下
默认账号密码一般均为51Aspx
关于源码使用常见问题及解决方案,请参阅: https://www.51aspx.com/Help

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\SmallestCSVParser\SmallestCSVParser.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="test1.csv">

@ -0,0 +1,15 @@
// The parser does not Close (Dispose) the StreamReader.
// The calling code is responsible, so we add `using` here.
using var sr = new StreamReader("test1.csv");
var parser = new SmallestCSV.SmallestCSVParser(sr);
// Set this to true if you don't care about preserving the quotes around fields.
// (Sometimes that is used to distinguish a null vs empty field.)
const bool removeEnclosingQuotes=false;
while (true) {
List<string>? columns = parser.ReadNextRow(removeEnclosingQuotes:removeEnclosingQuotes);
if (columns == null) {
Console.WriteLine("End of file reached");
break;

@ -0,0 +1,15 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"Example/1.0.0": {
"dependencies": {
"SmallestCSVParser": "1.1.1"
},
"runtime": {
"Example.dll": {}
}

@ -0,0 +1,12 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>SmallestCSVParser</name>
</assembly>
<members>
<member name="T:SmallestCSV.SmallestCSVParser.Error">
<summary>
This is thrown if the CSV has invalid syntax.
</summary>
</member>
<member name="M:SmallestCSV.SmallestCSVParser.#ctor(System.IO.StreamReader)">
<summary>
This class does not Close/Dispose the `stream`.
</summary>

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Example")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

@ -0,0 +1,15 @@
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\bin\Debug\net8.0\Example.exe
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\bin\Debug\net8.0\Example.deps.json
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\bin\Debug\net8.0\Example.runtimeconfig.json
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\bin\Debug\net8.0\Example.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\bin\Debug\net8.0\Example.pdb
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\bin\Debug\net8.0\SmallestCSVParser.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\bin\Debug\net8.0\SmallestCSVParser.pdb
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\bin\Debug\net8.0\SmallestCSVParser.xml
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\obj\Debug\net8.0\Example.csproj.AssemblyReference.cache
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\obj\Debug\net8.0\Example.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\obj\Debug\net8.0\Example.AssemblyInfoInputs.cache
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\obj\Debug\net8.0\Example.AssemblyInfo.cs
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\obj\Debug\net8.0\Example.csproj.CoreCompileInputs.cache
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\obj\Debug\net8.0\Example.csproj.CopyComplete
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\Example\obj\Debug\net8.0\Example.dll

@ -0,0 +1,15 @@
{
"format": 1,
"restore": {
"C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\Example\\Example.csproj": {}
},
"projects": {
"C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\Example\\Example.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\Example\\Example.csproj",
"projectName": "Example",
"projectPath": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\Example\\Example.csproj",
"packagesPath": "C:\\Users\\coder\\.nuget\\packages\\",
"outputPath": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\Example\\obj\\",
"projectStyle": "PackageReference",

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Example")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

@ -0,0 +1,15 @@
{
"version": 3,
"targets": {
"net8.0": {
"SmallestCSVParser/1.1.1": {
"type": "project",
"framework": ".NETCoreApp,Version=v6.0",
"compile": {
"bin/placeholder/SmallestCSVParser.dll": {}
},
"runtime": {
"bin/placeholder/SmallestCSVParser.dll": {}
}
}
}

@ -0,0 +1,15 @@
// SmallestCSVParser version 1.1.1 - Copyright (C) 2024 Karl Pickett
using System.Text;
namespace SmallestCSV;
public class SmallestCSVParser
{
/// <summary>
/// This is thrown if the CSV has invalid syntax.
/// </summary>
public class Error: Exception {
public Error(string message): base(message) { }
}

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
<PackageId>SmallestCSVParser</PackageId>
<Version>1.1.1</Version>
<Authors>Karl Pickett</Authors>
<PackageTags>CSV,Utilities</PackageTags>
<PackageProjectUrl>https://github.com/kjpgit/SmallestCSVParser/</PackageProjectUrl>

@ -0,0 +1,15 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"SmallestCSVParser/1.1.1": {
"runtime": {
"SmallestCSVParser.dll": {}
}
}
}
},

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>SmallestCSVParser</name>
</assembly>
<members>
<member name="T:SmallestCSV.SmallestCSVParser.Error">
<summary>
This is thrown if the CSV has invalid syntax.
</summary>
</member>
<member name="M:SmallestCSV.SmallestCSVParser.#ctor(System.IO.StreamReader)">
<summary>
This class does not Close/Dispose the `stream`.
</summary>

@ -0,0 +1,15 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"SmallestCSVParser/1.1.1": {
"runtime": {
"SmallestCSVParser.dll": {}
}
}
}
},

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>SmallestCSVParser</name>
</assembly>
<members>
<member name="T:SmallestCSV.SmallestCSVParser.Error">
<summary>
This is thrown if the CSV has invalid syntax.
</summary>
</member>
<member name="M:SmallestCSV.SmallestCSVParser.#ctor(System.IO.StreamReader)">
<summary>
This class does not Close/Dispose the `stream`.
</summary>

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Karl Pickett")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

@ -0,0 +1,12 @@
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\bin\Debug\net6.0\SmallestCSVParser.xml
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\bin\Debug\net6.0\SmallestCSVParser.deps.json
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\bin\Debug\net6.0\SmallestCSVParser.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\bin\Debug\net6.0\SmallestCSVParser.pdb
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Debug\net6.0\SmallestCSVParser.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Debug\net6.0\SmallestCSVParser.AssemblyInfoInputs.cache
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Debug\net6.0\SmallestCSVParser.AssemblyInfo.cs
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Debug\net6.0\SmallestCSVParser.csproj.CoreCompileInputs.cache
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Debug\net6.0\SmallestCSVParser.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Debug\net6.0\refint\SmallestCSVParser.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Debug\net6.0\SmallestCSVParser.pdb
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Debug\net6.0\ref\SmallestCSVParser.dll

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Karl Pickett")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

@ -0,0 +1,12 @@
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\bin\Release\net6.0\SmallestCSVParser.xml
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\bin\Release\net6.0\SmallestCSVParser.deps.json
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\bin\Release\net6.0\SmallestCSVParser.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\bin\Release\net6.0\SmallestCSVParser.pdb
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Release\net6.0\SmallestCSVParser.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Release\net6.0\SmallestCSVParser.AssemblyInfoInputs.cache
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Release\net6.0\SmallestCSVParser.AssemblyInfo.cs
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Release\net6.0\SmallestCSVParser.csproj.CoreCompileInputs.cache
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Release\net6.0\SmallestCSVParser.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Release\net6.0\refint\SmallestCSVParser.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Release\net6.0\SmallestCSVParser.pdb
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParser\obj\Release\net6.0\ref\SmallestCSVParser.dll

@ -0,0 +1,15 @@
{
"format": 1,
"restore": {
"C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParser\\SmallestCSVParser.csproj": {}
},
"projects": {
"C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParser\\SmallestCSVParser.csproj": {
"version": "1.1.1",
"restore": {
"projectUniqueName": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParser\\SmallestCSVParser.csproj",
"projectName": "SmallestCSVParser",
"projectPath": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParser\\SmallestCSVParser.csproj",
"packagesPath": "C:\\Users\\coder\\.nuget\\packages\\",
"outputPath": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParser\\obj\\",
"projectStyle": "PackageReference",

@ -0,0 +1,15 @@
{
"version": 3,
"targets": {
"net6.0": {}
},
"libraries": {},
"projectFileDependencyGroups": {
"net6.0": []
},
"packageFolders": {
"C:\\Users\\coder\\.nuget\\packages\\": {},
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {},
"C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {}
},
"project": {

@ -0,0 +1,15 @@
// SmallestCSVParser version 1.0 - Copyright (C) 2024 Karl Pickett
using System.Diagnostics;
using System.Text;
namespace SmallestCSV;
public class SmallestCSVParser_1_0
{
public class Error: Exception {
public Error(string message): base(message) { }
}
public SmallestCSVParser_1_0(StreamReader stream) {
_stream = stream;

@ -0,0 +1,15 @@
using System.Diagnostics;
using System;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using SmallestCSV;
public class SmallestCSVParserBenchmark
{
[Benchmark]
public void ReadCSV() {
using var sr = new StreamReader("performance1.csv");
var parser = new SmallestCSVParser(sr);
var rows = 0;
while (parser.ReadNextRow() != null) {

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.12" />
</ItemGroup>
<ItemGroup>
<Content Include="*.csv">

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>SmallestCSVParser</name>
</assembly>
<members>
<member name="T:SmallestCSV.SmallestCSVParser.Error">
<summary>
This is thrown if the CSV has invalid syntax.
</summary>
</member>
<member name="M:SmallestCSV.SmallestCSVParser.#ctor(System.IO.StreamReader)">
<summary>
This class does not Close/Dispose the `stream`.
</summary>

@ -0,0 +1,15 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"SmallestCSVParserBenchmark/1.0.0": {
"dependencies": {
"BenchmarkDotNet": "0.13.12",
"SmallestCSVParser": "1.1.1"
},
"runtime": {
"SmallestCSVParserBenchmark.dll": {}

@ -0,0 +1,12 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>SmallestCSVParserBenchmark-20240423-180437</title>
<style type="text/css">
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
td, th { padding: 6px 13px; border: 1px solid #ddd; text-align: right; }
tr { background-color: #fff; border-top: 1px solid #ccc; }
tr:nth-child(even) { background: #f8f8f8; }
</style>
</head>
<body>
<pre><code>

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>SmallestCSVParser</name>
</assembly>
<members>
<member name="T:SmallestCSV.SmallestCSVParser.Error">
<summary>
This is thrown if the CSV has invalid syntax.
</summary>
</member>
<member name="M:SmallestCSV.SmallestCSVParser.#ctor(System.IO.StreamReader)">
<summary>
This class does not Close/Dispose the `stream`.
</summary>

@ -0,0 +1,15 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"SmallestCSVParserBenchmark/1.0.0": {
"dependencies": {
"BenchmarkDotNet": "0.13.12",
"SmallestCSVParser": "1.1.1"
},
"runtime": {
"SmallestCSVParserBenchmark.dll": {}

@ -0,0 +1,13 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("SmallestCSVParserBenchmark")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

@ -0,0 +1,15 @@
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\TraceReloggerLib.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\Dia2Lib.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\OSExtensions.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\x86\KernelTraceControl.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\x86\KernelTraceControl.Win61.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\x86\msdia140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\x86\msvcp140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\x86\vcruntime140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\amd64\KernelTraceControl.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\amd64\msdia140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\amd64\msvcp140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\amd64\vcruntime140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\amd64\vcruntime140_1.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\arm64\KernelTraceControl.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Debug\net8.0\arm64\msdia140.dll

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("SmallestCSVParserBenchmark")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

@ -0,0 +1,15 @@
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\TraceReloggerLib.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\Dia2Lib.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\OSExtensions.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\x86\KernelTraceControl.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\x86\KernelTraceControl.Win61.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\x86\msdia140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\x86\msvcp140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\x86\vcruntime140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\amd64\KernelTraceControl.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\amd64\msdia140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\amd64\msvcp140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\amd64\vcruntime140.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\amd64\vcruntime140_1.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\arm64\KernelTraceControl.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserBenchmark\bin\Release\net8.0\arm64\msdia140.dll

@ -0,0 +1,15 @@
{
"format": 1,
"restore": {
"C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserBenchmark\\SmallestCSVParserBenchmark.csproj": {}
},
"projects": {
"C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserBenchmark\\SmallestCSVParserBenchmark.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserBenchmark\\SmallestCSVParserBenchmark.csproj",
"projectName": "SmallestCSVParserBenchmark",
"projectPath": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserBenchmark\\SmallestCSVParserBenchmark.csproj",
"packagesPath": "C:\\Users\\coder\\.nuget\\packages\\",
"outputPath": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserBenchmark\\obj\\",
"projectStyle": "PackageReference",

@ -0,0 +1,15 @@
{
"version": 3,
"targets": {
"net8.0": {
"BenchmarkDotNet/0.13.12": {
"type": "package",
"dependencies": {
"BenchmarkDotNet.Annotations": "0.13.12",
"CommandLineParser": "2.9.1",
"Gee.External.Capstone": "2.3.0",
"Iced": "1.17.0",
"Microsoft.CodeAnalysis.CSharp": "4.1.0",
"Microsoft.Diagnostics.Runtime": "2.2.332302",
"Microsoft.Diagnostics.Tracing.TraceEvent": "3.0.2",
"Microsoft.DotNet.PlatformAbstractions": "3.1.6",

@ -0,0 +1 @@
global using Microsoft.VisualStudio.TestTools.UnitTesting;

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="MSTest.TestAdapter" Version="3.0.4" />
<PackageReference Include="MSTest.TestFramework" Version="3.0.4" />

@ -0,0 +1,15 @@
using System.Text;
using System.Text.Json;
using SmallestCSV;
[TestClass]
public class SmallestCSVParserTest
{
[TestMethod]
public void Test1() {
using var sr = new StreamReader("test1.csv");
var parser = new SmallestCSVParser(sr);
string[][] expected = [
[ "a", "b", " c ", " 1 2 \"3\" ", "\"4\"" ],
[ "d", "e", "f" ],

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions</name>
</assembly>
<members>
<member name="T:Microsoft.VisualStudio.TestTools.UnitTesting.DeploymentItemAttribute">
<summary>
Used to specify deployment item (file or directory) for per-test deployment.
Can be specified on test class or test method.
Can have multiple instances of the attribute to specify more than one item.
The item path can be absolute or relative, if relative, it is relative to RunConfig.RelativePathRoot.
</summary>
<remarks>
If specified on a test class, the class needs to contain at least one test method. This means that the

@ -0,0 +1,15 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>SmallestCSVParser</name>
</assembly>
<members>
<member name="T:SmallestCSV.SmallestCSVParser.Error">
<summary>
This is thrown if the CSV has invalid syntax.
</summary>
</member>
<member name="M:SmallestCSV.SmallestCSVParser.#ctor(System.IO.StreamReader)">
<summary>
This class does not Close/Dispose the `stream`.
</summary>

@ -0,0 +1,15 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"SmallestCSVParserTests/1.0.0": {
"dependencies": {
"MSTest.TestAdapter": "3.0.4",
"MSTest.TestFramework": "3.0.4",
"Microsoft.NET.Test.Sdk": "17.6.0",
"SmallestCSVParser": "1.1.1",
"coverlet.collector": "6.0.0",

@ -0,0 +1,12 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
"configProperties": {
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("SmallestCSVParserTests")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

@ -0,0 +1,15 @@
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\CoverletSourceRootsMapping_SmallestCSVParserTests
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\testhost.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\testhost.exe
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\Microsoft.TestPlatform.AdapterUtilities.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\test1.csv
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\SmallestCSVParserTests.deps.json
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\SmallestCSVParserTests.runtimeconfig.json
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\SmallestCSVParserTests.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\SmallestCSVParserTests.pdb
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\Microsoft.VisualStudio.CodeCoverage.Shim.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\Microsoft.TestPlatform.CoreUtilities.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\Microsoft.TestPlatform.PlatformAbstractions.dll
C:\Users\coder\Desktop\2024Code\4\20240423\submit\1\SmallestCSVParser-master\SmallestCSVParser-master\SmallestCSVParserTests\bin\Debug\net8.0\Microsoft.VisualStudio.TestPlatform.ObjectModel.dll

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

@ -0,0 +1,15 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("SmallestCSVParserTests")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]

@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

@ -0,0 +1,15 @@
{
"format": 1,
"restore": {
"C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserTests\\SmallestCSVParserTests.csproj": {}
},
"projects": {
"C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserTests\\SmallestCSVParserTests.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserTests\\SmallestCSVParserTests.csproj",
"projectName": "SmallestCSVParserTests",
"projectPath": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserTests\\SmallestCSVParserTests.csproj",
"packagesPath": "C:\\Users\\coder\\.nuget\\packages\\",
"outputPath": "C:\\Users\\coder\\Desktop\\2024Code\\4\\20240423\\submit\\1\\SmallestCSVParser-master\\SmallestCSVParser-master\\SmallestCSVParserTests\\obj\\",
"projectStyle": "PackageReference",

@ -0,0 +1,15 @@
{
"version": 3,
"targets": {
"net8.0": {
"coverlet.collector/6.0.0": {
"type": "package",
"build": {
"build/netstandard1.0/coverlet.collector.targets": {}
}
},
"Microsoft.CodeCoverage/17.6.0": {
"type": "package",
"compile": {
"lib/netcoreapp3.1/Microsoft.VisualStudio.CodeCoverage.Shim.dll": {}
},
Loading…
Cancel
Save