通用列表到 CSV 字符串

2024-01-08

我有一个列表想要写入 CSV 字符串。

我发现的例子似乎都是针对单个项目列表,我的有多个项目。

我目前拥有的代码是;

private static string CreateCSVTextFile<T>(List<T> data, string seperator = ",") where T : ExcelReport, new()
{
  var objectType = typeof(T);
  var properties = objectType.GetProperties();
  var currentRow = 0;
  var returnString = "";
  foreach (var row in data)
  {
    var currentColumn = 0;
    var lineString = "";
    foreach (var info in properties)
    {
      lineString = lineString + info.GetValue(row, null) + seperator;
      currentColumn++;
    }
    if (seperator != "")
    {
      lineString = lineString.Substring(0, lineString.Count() - 2);
    }
    returnString = returnString + Environment.NewLine + lineString;
    currentRow++;
  }
  return returnString;
}

但当列表很大时,此方法需要很长时间才能运行。

我的列表所基于的类看起来像;

internal class ClientMasterFile
{
public String COL1{ get; set; }
public String COL2{ get; set; }
public String COL3{ get; set; }
public String COL4{ get; set; }
public String COL5{ get; set; }
public String COL6{ get; set; }
public String COL7{ get; set; }
public String COL8{ get; set; }
public String COL9{ get; set; }
public String COL10{ get; set; }
public String COL11{ get; set; }
public String COL12{ get; set; }
}

是否有使用高级版本的 String.Join 更快的方法来做到这一点?

Thanks


您的方法可以使用简化StringBuilder http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx and string.Join http://msdn.microsoft.com/en-us/library/System.String.Join.aspx.

直接连接字符串速度很慢并且会占用大量内存,这对于小型操作来说是很好的。

See: StringBuilder 是否比 String 连接使用更多内存? https://stackoverflow.com/questions/4191079/does-stringbuilder-use-more-memory-than-string-concatenation

private static string CreateCSVTextFile<T>(List<T> data, string seperator = ",")
{
    var properties = typeof(T).GetProperties();
    var result = new StringBuilder();

    foreach (var row in data)
    {
        var values = properties.Select(p => p.GetValue(row, null));
        var line = string.Join(seperator, values);
        result.AppendLine(line);
    }

    return result.ToString();
}

更完整的 CSV 实现:

private static string CreateCSVTextFile<T>(List<T> data)
{
    var properties = typeof(T).GetProperties();
    var result = new StringBuilder();

    foreach (var row in data)
    {
        var values = properties.Select(p => p.GetValue(row, null))
                               .Select(v => StringToCSVCell(Convert.ToString(v)));
        var line = string.Join(",", values);
        result.AppendLine(line);
    }

    return result.ToString();
}

private static string StringToCSVCell(string str)
{
    bool mustQuote = (str.Contains(",") || str.Contains("\"") || str.Contains("\r") || str.Contains("\n"));
    if (mustQuote)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("\"");
        foreach (char nextChar in str)
        {
            sb.Append(nextChar);
            if (nextChar == '"')
                sb.Append("\"");
        }
        sb.Append("\"");
        return sb.ToString();
    }

    return str;
}

Using: 将棘手的字符串转义为 CSV 格式 https://stackoverflow.com/questions/6377454/escaping-tricky-string-to-csv-format

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通用列表到 CSV 字符串 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 重载<<的返回值

    include
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 如何在 Yii2 中手动在数据库中创建用户?

    我将用户从 csv 文件导入到数据库中 在 csv 文件中 我有一些用户名和密码字符串 那么如何手动创建新用户呢 据我了解我需要getPasswordHash and generateAuthKey 最后一个生成随机字符串 但可能我丢失了一
  • 如何将.fs文件编译为.exe?

    我没有找到将简单文件 fs 编译为 exe 的方法 我尝试了这个例子 但它不起作用 在文件 dolphin fs 中 let longBeaked Delphinus capensis let shortBeaked Delphinus d
  • XHTML 网站抓取指南

    我对 VBA 和 HTML XHTML 非常陌生 但是通过在线研究和这里其他优秀成员的帮助 我已经成功编写了一段代码来提取我想要的数据 我很难识别我想要的元素的 ID 因为它是 XHTML 格式的 所以我认为这是我搞砸的地方 网站 这是我想
  • 弱属性需要大量开销?

    在大约 100 000 次 setDelegate 调用后 我的 iOS 应用程序在 setDelegate 上停滞了大约 15 秒 将委托属性从弱更改为分配可以解决该问题 知道为什么弱属性有如此多的开销并导致应用程序停止运行吗 我怀疑弱引
  • 如何检查字节数组是否是有效图像?

    我知道没有用于检查的 Net 函数 但是在使用字节数组之前是否有一种算法或简单有效的方法来检查字节是否是有效图像 我需要这个 因为我要向不断监听客户端的服务器发送不同的命令 其中一个命令是获取服务器计算机的屏幕截图 您可以尝试从字节数组生成
  • ExecuteNonQuery() 始终返回 -1

    我正在使用存储过程在表中插入一些值 CREATE PROCEDURE dbo Sp InsertValue Val1 as nvarchar 50 Val2 as nvarchar 50 as BEGIN IF NOT EXISTS SEL
  • 如何向 Meteor.users 集合添加字段

    我想要存储在客户端用户文档中的 Facebook accessToken 继流星文档 http docs meteor com meteor users 我应该添加一个新的发布调用 在 server js 中 Meteor publish
  • Curl 发送 .tar.gz 文件时出现错误 56“从对等方接收数据时失败”

    我对这个 CURL 调用有问题 curl X POST data binary File01 tar gz http website intra prova it gore orgac PINGU TEST lots Test 017 co
  • Ruby Guard 问题 - “请安装 sqlite3 适配器” -railstutorial.org

    我正在跟随Ruby on Rails 教程 http ruby railstutorial org 并且在测试部分有些困惑 特别是 3 6 2 使用 Guard 进行自动化测试 http ruby railstutorial org cha
  • 从 Ubuntu 中删除 chromedriver

    我想更新按照此说明安装的 chromedriver 版本https christopher su 2015 selenium chromedriver ubuntu https christopher su 2015 selenium ch
  • 使用 jersey ServletContainer 时从 web.xml 获取配置数据

    我正在使用 jersey 在 Tomcat 中创建一个 web 应用程序 我还没有创建 Servlet 我只是使用 jersey ServletContainer 和一些 Resource 类 我的 web xml
  • 在 mac bash 终端中使用 shell 命令时出现“非法字节序列”错误

    尝试在 MacOS bash shell 中从大文件中提取非英文字符时出现 非法字节序列 错误 这是我尝试使用的脚本 sed s a z 0 9 A Z g lt 1 gt Abhineet extract1 txt sed s 1 g
  • 将不同的集合绑定到数据网格

    我有一些收藏 例如 List 1 and List 2 两者都是List 我需要做什么 1 将它们插入Datagrid 2 添加新项目Lists 例如 表单上有一些按钮 我单击它 新项目将添加到第一个列表中 Datagrid现在看起来像这样
  • 如何在 C 中将结构存储和检索到共享内存区域

    对于uni分配 我需要创建一个最多包含10个文件名的循环列表 然后将它们存储在共享内存区域中 以便2个子进程可以读取 写入该列表 使用信号量来控制访问 问题是 我是一个完全的 C 新手 我感到失落和绝望 因为它完全超出了我的能力范围 我需要
  • 如何查询 Google BigQuery 表并根据列的子集删除重复项?

    我有一个查询连接两个 google 表并生成一个包含 6 列的表 a b c d e f 接下来 我将该表移至 google 存储桶 然后将该 google 存储桶下载到一堆 CSV 最后我将这些 CSv 插入到postgres数据库表有2
  • 如何判断用户是否点击了浏览器后退按钮或刷新按钮

    我需要确定用户是否单击浏览器后退按钮或刷新按钮 当他单击后退或刷新按钮时 我需要将页面重定向到错误页面 这个怎么做 我需要在 ASP net 页面的 javascript 中执行此操作 首先 如果用户使用 后退 或出于某种原因必须刷新页面
  • 如何使用Spring正确关闭执行器服务?

    我有一个命令行应用程序 它使用由 java 组成的 Spring 管理的 beanExecutorService创建于 ExecutorService service Executors newFixedThreadPool 4 现在 我希
  • ObjectAnimator导致ImageView消失

    我正在制作动画ImageView在 Android API 19 中 使用ObjectAnimator 我一切正常 在 Galaxy S3 上显示完美 但在我的 Nexus 7 2013 WiFi 型号 上却出现问题 目标是使用以下命令让图
  • “git push --mirror”足以备份我的存储库吗?

    我是一名独立开发人员 在本地 Git 存储库中工作 对于备份 我想将该存储库的精确副本发送到另一台服务器 这样做就足够了吗 git push mirror 我这么问是因为有时我可以在 Git 告诉我 一切都是最新的 之前运行这个命令两到三次
  • 通用列表到 CSV 字符串

    我有一个列表想要写入 CSV 字符串 我发现的例子似乎都是针对单个项目列表 我的有多个项目 我目前拥有的代码是 private static string CreateCSVTextFile