簡體   English   中英

在ASP .NET Web應用程序中如何從制表符分隔的文件讀取到C#

[英]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#。 最后,我想將帶有圖像分析的用戶輸入值存儲到用戶帳戶中,以供將來分析。

  1. 首先,我尋找了一種從SQL Server連接到Derby數據庫的方法,但沒有找到驅動程序來執行此操作。 最接近的是EasySoft(據我所知, Easysoft是500英鎊,我留給將來使用)。 有一個連接器可以從Microsoft的Derby連接到SQL,但似乎卻相反。 目前,我放棄了,但是在將來,我想獲得一些解決方案,以開發到達數據庫的移動應用程序。 目前,我對Java的了解還不足以為該商用Java應用程序開發可寫入SQL Server的插件。
    1. 由於Java應用程序和IIS位於同一台計算機上,因此我可以直接訪問數據庫的目錄結構,這是我現在正在使用的臨時解決方案。 數據文件是制表符分隔的文件,其前7行以#開頭,第8行是列名(有36列數據),第9行是值(文本,整數和實數值)。 沒有更多的行。 我可以使用制表符分隔的格式輕松地將文件讀取到Excel,並且我感興趣的三個值分別是N9(第14列第9行),AE9(第31列第9行)和AH9(第34列第9行)。 所有圖像數據都具有相同的格式,文件路徑就是捕獲。 嘗試在不使用Excel的某種Excel導入中嘗試將其讀取為制表符分隔文件,並按Web應用程序C#中的列號和行號進行引用。 我已經看到了多個LinQ示例,但是它們似乎需要在第一行包含標題,然后需要與第一行相同數量的數據。

我是編程新手(例如,在做了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM