[英]How to read from tab delimited file to C# in asp .net web app
我想从制表符分隔的文件中读取ASP.NET Web应用程序的C#代码。 我开发了一个基于VS 2017 Web应用程序的Web应用程序(文件,新建,网站,C#,ASP .NET Web窗体网站)。 它从用户(图像)接收几个整数和文本值,然后在服务器端将其传递给java.exe外部应用程序,该应用程序将图像分析结果写入java Derby数据库(以命令java.exe -Xmx2G -jar开始。 jar 5206 JAVA_DB org.apache.derby.jdbc.EmbeddedDriver jdbc:derby:C:/ folder ...)。 该Web应用程序在Windows Server 2016上运行,在IIS中,我安装了SQL Server 2016 Express。 在用户登录时,请处理文件。 Java应用程序(商业)和IIS在同一台Server计算机上运行。 现在,我想将记录从数据库获取到Web应用程序中的C#。 最后,我想将带有图像分析的用户输入值存储到用户帐户中,以供将来分析。
我是编程新手(例如,在做了30年的其他工作后从Borland Pascal返回),所以请耐心等待我的无知。 对于开发此类应用程序的任何Microsoft Virtual Academy课程或类似Channel 9等课程的建议,我们都表示赞赏。 我需要在八月底前完成该应用程序,因此我不需要它很优雅,只需工作即可。
任何解决点1或2的建议均应受到赞赏。
关于马辛
您可以使用魔术连接字符串,将分隔文件视为数据库提供程序。 这是一个代码示例,该示例读取名为fileName
的文件并将其作为DataTable
返回。
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0; Data Source = " + System.IO.Path.GetDirectoryName(fileName) + ";Extended Properties = \"Text;HDR=YES;FMT=TabDelimited\"");
conn.Open();
string sql = "SELECT * FROM [" + System.IO.Path.GetFileName(fileName) + "]";
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
System.Data.DataSet ds = new System.Data.DataSet("CSV File");
adapter.Fill(ds);
conn.Close();
return ds.Tables[0];
我解决了问题。 这是VS 2017的代码。我创建了一个名为VOISTATread的控制台应用程序。 * .voistat文件由java.exe生成,位于Derby数据库中。 文件就是这样(共9行)-哈希替换实际符号不为标题:
# PMOD_VOI_STATISTICS
# FORMAT[UNI]
# DATE_TIME[2017.08.07_13:04:45]
# VERSION[3.901]
# AXIS[Experiment][VOI][TAC][]
# VOXEL_FRACTION_MODE[0]
# DATA
// Component [string] File [string] PatientName [string] PatientID [string] PatientInfo [string] StudyDescription [string] SeriesDescription [string] StudyDate [date_time] Color [0xARGB] VoiName(Region) [string] Time [seconds] Averaged [1/1] Sd [1/1] Volume [ccm] Total(SUM) [1/1] Total(AVR*VOL) [(1/1)*(ccm)] Min [1/1] Max [1/1] NumberOfPixels [voxels] NumberOfEffectivePixels [voxels] HotAveraged(5) [1/1] Stdv [1/1] Q1 [1/1] Median [1/1] Q3 [1/1] AreaUnderCurve [(1/1)*(seconds)] HypoxiaIndex [1/1] HypoxicVolume [ccm] NumberOfNaNs [1/1] VolumeWithoutNaNs [ccm] SurfaceArea [cm2] Sphericity [1/1] DiameterMax [cm] FractalDimension [1/1] FD_LConfidenceInterval [1/1] FD_HConfidenceInterval [1/1]
C:/Pmod3.8/data/DCMINSAH1/IMAGE_15_418472066475064.zip/IMAGE_1_418451934181564.image IMAGE_1_418451934181564 TEACHINGFILE-CT-10697 TEACHINGFILE-CT-10697 birthDate = 19480325, size = 0.0, weight = 0.0, sex = F TC CEREBRAL CON/SIN CONTRASTE Craneo 5.0 H31s |> NORMALIZED to Head CT reference 1mm CU [Gauss] 20130424_113833.046 ff0000ff Thr_60.0_80.0 22.4720165 68.55565556 5.484521182 67.401 4620719.74 4620.71974 59.95684814 80.04032898 67401 67401 80.03869019 5.484561868 63.66357422 68.33154297 72.99787903 3081.167646 1 67.401 0 67.401 1206.685689 0.066374438 17.66069081 2.164787075 2.004986778 2.324587372
Program.cs的主要部分是这样的:
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.OleDb;
using FileHelpers;
using FileHelpers.Events;
namespace VOISTATread
{
// string delimiterString = "\t";
class Program
{
//private static DataTable[] ar;
static void Main(string[] args)
{
string fileNamePath = @"C:\Pmod.data\data\DATABASES\SAHCNA1\data\M8\20170807\";
string fileName = "038851711563975.voistat";
Console.WriteLine("fileNamePath:"+fileNamePath);
Console.WriteLine("fileName:" + fileName);
Console.ReadLine();
var engine = new FileHelperEngine<PatientVOIstat>();
var result = engine.ReadFile(fileNamePath + fileName);
{
// The engine is IEnumerable
foreach (var VOI in result)
{
// your code here
Console.WriteLine("Volume, mL: "+VOI.Volume);
Console.WriteLine("Area, cm2: "+VOI.SurfaceArea);
Console.WriteLine("Fractal dimension: "+VOI.FractalDimension);
}
}
Console.WriteLine("End of data reached");
Console.ReadLine();
}
}
}
第二部分在VS中作为C#类PatientVOIstat.cs创建,如下所示:
using FileHelpers;
using FileHelpers.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VOISTATread
{
//class Layout
//{
//}
[DelimitedRecord("\t")]
[IgnoreEmptyLines]
public class PatientVOIstat : INotifyRead
{
// public int CustId;
//public string Name;
//public decimal Balance;
// [FieldConverter(ConverterKind.Date, "dd-MM-yyyy")]
// public DateTime AddedDate;
public string Component;
public string File;
public string PatientName;
public string PatientID;
public string PatientInfo;
public string StudyDescription;
public string SeriesDescription;
public string StudyDate;
public string Color;
public string VoiName;
public double Time;
public double Averaged;
public double Sd;
public double Volume;
public double TotalSUM;
public double TotalAVRVOL;
public double MinimumVal;
public double MaximumVal;
public int NumberOfPixels;
public int NumberOfEffectivePixels;
public double HotAveraged;
public double Stdv;
public double Q1;
public double Median;
public double Q3;
public double AreaUnderCurve;
public double HypoxiaIndex;
public double HypoxicVolume;
public double NumberOfNaNs;
public double VolumeWithoutNaNs;
public double SurfaceArea;
public double Sphericity;
public double DiameterMax;
public double FractalDimension;
public double FD_LConfidenceInterval;
public double FD_HConfidenceInterval;
public void BeforeRead(BeforeReadEventArgs e)
{
if (e.RecordLine.StartsWith("#") ||
e.RecordLine.StartsWith("/"))
e.SkipThisRecord = true;
}
public void AfterRead(AfterReadEventArgs e)
{
// seems weird, but you have to handle this, even if nothing is done.
// we want to drop all records with no freight
//if (Freight == 0)
// e.SkipThisRecord = true;
}
}
}
FileHelpers.net中有一些用于其他类型的文本文件处理的示例。 有VSIX扩展要安装,或者您可以将FileHelpers作为Nudget软件包放置。 感谢Henrik对FileHelpers.net的建议。 您不需要所有using语句。 关于马辛
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.