下面的代码用于使用ASP.NET MVC2中的FileHelpers读取固定宽度的上载文件内容文本文件
第一行和最后一行的长度较小,因此ReadStream会导致异常.所有其他线都有适当的固定宽度.如何跳过第一行和最后一行或其他方式来读取数据无异常?
[FixedLengthRecord()]
class Bank
{
[FieldFixedLength(4)]
public string AINETUNNUS;
[FieldFixedLength(16)]
public string TEKST1;
[FieldFixedLength(3)]
public string opliik;
[FieldFixedLength(2)]
public string hinnalis;
};
[AcceptVerbs(HttpVerbs.Post)]
[Authorize]
public ActionResult LoadStatement(HttpPostedFileBase uploadFile)
{
FileHelperEngine engine = new FileHelperEngine(typeof(Bank));
var res = engine.ReadStream(new StreamReader(uploadFile.InputStream,
Encoding.GetEncoding(1257))) as Bank[];
}
Run Code Online (Sandbox Code Playgroud) SourceForge页面 - www.filehelpers.net - 最后一次更新于2007年,没有可用的下载.
Github repo - github.com/MarcosMeli/FileHelpers - 看起来很新,但最后一个标记版本是2.1
有一个NuGet包 - www.nuget.org/packages/FileHelpers-Stable - 但它已经两年了,而且不属于主要开发者Marcos Meli.有一个竞争的NuGet包 - www.nuget.org/packages/FileHelpers - 标记为2.0.0并由Marcos Meli拥有,但该代码已有 6年历史.
有TeamCity版本可用.有一个成功的开发版本标记为2.9.16.
我应该将哪一项用于生产就绪项目?或者是其他地方的最新生产版本?
编辑
我从github master克隆了,但它没有构建 - 充满了错误.我经历了在所有子项目上将.NET版本设置为4.5并修复了一些导入并让向导运行,但仍然有几十个警告.所以Github头显然不是生产就绪的版本.
编辑2
现在版本3.1已准备就绪,GitHub存储库是最新的,并使用CI进行连续构建从www.filehelpers.net下载最新版本
使用.Net 的FileHelper库,我可以以某种方式跳过源文件中的多个列吗?
根据文档和示例,我必须为所有列添加字段.唉,我有一个excel表,有216列可以导入,只需要13个.
我可以使用反射动态构建如下所示的类吗?没有方法,只有公共变量,有些有自定义属性.
是否需要.Emit方法(从我所看到的,"Emit"看起来有点挑战).
我正在使用www.FileHelpers.net上的软件,它需要一堂课.我的所有文件定义都在数据库表中,我想让所有内容更加动态(即当文件中出现新列时,代码不会更改).
[FileHelpers.DelimitedRecord(",")]
public class FileRow
{
[FileHelpers.FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string Borrower_First_Name;
[FileHelpers.FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string Borrower_Last_Name;
public string Borrower_Email;
}
Run Code Online (Sandbox Code Playgroud)
更新1:根据Vlad的回答我需要引用DLL,这是我如何做到的:
// need to reference the FileHelpers.dll from our own .exe directory
string diskFilenameFileHelpersDLL =
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().Location) +
@"\FileHelpers.dll";
Run Code Online (Sandbox Code Playgroud)
更新2:此外,在做了Vlad建议之后,这就是我调用FileHelper并循环结果的方法.我可能会将数据传输到列表中.
Assembly assembly = compiledResult.CompiledAssembly;
// Simple Data Test
lineContents = "John,Doe,jd123456@yahoo.com";
FileHelperEngine engine = new FileHelperEngine(assembly.GetType("FileRow"));
// FileRow[] FileRowArray = (FileRow[])engine.ReadString(lineContents);
Object[] FileRowArray = engine.ReadString(lineContents);
Object myObject = FileRowArray[0]; // only 1 row of data in …Run Code Online (Sandbox Code Playgroud) 我们在ANSI_NULLS设置和计算列方面存在一些问题,我们有大量的存储过程
SET ANSI_NULLS OFF
Run Code Online (Sandbox Code Playgroud)
我们想要将它们全部改为
SET ANSI_NULLS ON
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以做到这一点,或者我必须将所有SP提取到脚本,更改它并再次运行它以删除并重新创建所有SPa
我正在尝试使用FileHelpers(http://www.filehelpers.net/)解析一个非常大的csv文件.该文件为1GB压缩文件,解压缩约20GB.
string fileName = @"c:\myfile.csv.gz";
using (var fileStream = File.OpenRead(fileName))
{
using (GZipStream gzipStream = new GZipStream(fileStream, CompressionMode.Decompress, false))
{
using (TextReader textReader = new StreamReader(gzipStream))
{
var engine = new FileHelperEngine<CSVItem>();
CSVItem[] items = engine.ReadStream(textReader);
}
}
}
Run Code Online (Sandbox Code Playgroud)
FileHelpers然后抛出OutOfMemoryException.
测试失败:抛出了类型'System.OutOfMemoryException'的异常.System.OutOfMemoryException:抛出了类型'System.OutOfMemoryException'的异常.System.Text.StringBuilder.ExpandByABlock(Int32 minBlockCharCount)在System.Text.StringBuilder.Append(Char值,Int32 repeatCount)的System.Text.StringBuilder.Append(Char值)处于FileHelpers.StringHelper.ExtractQuotedString(LineInfo line,Char在FileHelpers.FileHelperEngine的FileHelpers.RecordInfo.StringToRecord(LineInfo行)的FileHelpers.FieldBase.ExtractValue(LineInfo行)的FileHelpers.DelimitedField.ExtractFieldString(LineInfo行)处的quoteChar,Boolean allowMultiline)
1.ReadStream(TextReader reader, Int32 maxRecords, DataTable dt) at FileHelpers.FileHelperEngine.ReadStream(TextReader reader)
是否可以使用FileHelpers解析这么大的文件?如果没有,任何人都可以推荐一种解析文件的方法吗?谢谢.
这是我想要阅读的数据:
"Adam C. Emality","1Z620Y1V034826","14.40"
"Ethel Baeron","1Z620Y1V034604","15.19"
"Donna Lidt","1Z620Y1V034650","12.37"
Run Code Online (Sandbox Code Playgroud)
然后在读完数据之后,我想在两个集合上执行一个Join,一个是数组,一个是列表 - 我的代码如下.但是在执行读取文件行之后,我的字符串就像这样存储"\"Adam C. Emality\"" "\"1Z620Y1V034826\"" "\"14.40\""......等等.为什么会发生这种情况?我不想包括",我不知道它为什么要加入\.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FileHelpers;
using Parser;
namespace Amazon_File
{
class SpreadSheet
{
public void create(IEnumerable<SpreadList> list)
{
var steamengine = new FileHelperEngine<Records>();
var records = steamengine.ReadFile(@"C:\Users\Danny\Documents\Visual Studio 2013\Projects\Amazon File\Amazon File\Daniel.csv");
var spreadlist = from x in list
join y in records on x.Name equals y.Name
select new { y.Name, y.Track, y.worldPrice, …Run Code Online (Sandbox Code Playgroud) filehelpers ×6
c# ×5
.net ×2
csv ×2
asp.net-mvc ×1
class ×1
linq ×1
readfile ×1
reflection ×1
sql-server ×1