首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在asp .net web应用程序中如何从选项卡分隔文件读取到C#

在asp .net web应用程序中如何从选项卡分隔文件读取到C#
EN

Stack Overflow用户
提问于 2017-08-07 20:07:03
回答 2查看 1.3K关注 0票数 1

I想从标签分隔的文件中读取ASP .net Web应用程序的C#代码。I开发了一个基于VS 2017 Web应用程序的Web应用程序(文件、新的、网站、C#、asp .NET网站)。它接收来自用户的几个整数和文本值(图像),在服务器端将其传递给java.exe外部应用程序,该应用程序将图像分析写入JAVA_DB数据库(从命令java.exe -Xmx2G -jar filename.jar 5206 JAVA_DB org.apache.derby.jdbc.EmbeddedDriver jdbc: Derby :C:/filename.jar.开始)。web应用程序运行在Windows 2016上,在IIS中,我安装了SQLServer2016Express。目前,用户登录,使文件得到处理。Java应用程序(商业)和IIS运行在同一台服务器上。现在,我想在web应用程序中从数据库获取记录到C#。最后,我希望将用户输入的值与图像分析一起存储到用户帐户中,以便将来进行分析。

  1. 首先,我寻找了一种从Server连接到Derby数据库的方法,但没有发现驱动程序可以这样做。最接近的是EasySoft (据我所知,易软),但我已经500英镑了,我把它留给了未来。有一个连接器可以从Derby、Microsoft访问SQL,但情况似乎正好相反。目前我放弃了,但在未来我想得到一些解决方案,以开发移动应用程序,以达到数据库。目前,我还不了解足够的Java,无法为这个商业java应用程序开发一个插件,该应用程序可以写入SQL服务器。
    1. 由于java应用程序和IIS位于同一台计算机上,所以我可以直接访问数据库的目录结构,这是我现在工作的临时解决方案。数据文件是一个标签分隔文件,前7行以#开头,第8行为列名(有36列数据),第9行为值(文本、整数和实值)。没有更多的行。我可以轻松地将文件读取到Excel中,作为选项卡分隔,我感兴趣的三个值是N9 (第14列,第9行)、AE9 (第31行、第9行)和AH9 (第34行,第9行)。所有图像数据都采用相同的格式,文件路径是捕获的。在某种没有Excel的Excel导入中,尝试将其读取为选项卡分隔的文件,并在web应用程序的C#中按列#和行#引用。我已经看到了几个LinQ示例,但它们似乎需要头第一行,然后是与第一行相同数量的数据。

我对编程很陌生(比如,在做了30年的其他事情之后,从Borland回来),所以请耐心地对待我的无知。任何微软虚拟学院课程,或类似9频道等课程的建议,开发这样的应用程序是非常感谢的。我需要在8月底完成应用程序,所以我不需要它是优雅的,只是工作。

如有任何解决第1或第2点的建议,我们将不胜感激。

问候Marcin

EN

回答 2

Stack Overflow用户

发布于 2017-08-07 20:30:48

您可以使用神奇的连接字符串,将分隔的文件作为数据库提供程序处理。下面是一个代码示例,它读取名为fileName的文件并将其作为DataTable返回。

代码语言:javascript
复制
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];
票数 0
EN

Stack Overflow用户

发布于 2017-08-11 09:41:20

我把问题解决了。这是VS 2017的代码。我创建了一个名为VOISTATread的控制台应用程序。*.voistat文件由java.exe生成,并位于Derby数据库中。该文件是这样的(总共9行)- Hash替换了实际的符号,以不获取标题:

代码语言:javascript
复制
# 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的主要部分如下:

代码语言:javascript
复制
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创建,其内容如下:

代码语言:javascript
复制
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包。谢谢亨里克对FileHelpers.net的建议。您不需要所有使用语句。问候Marcin

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45554908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档