2017-08-07 19 views
0

タブ区切りファイルからasp .net web appのC#コードを読みたいと思います。 VS 2017 Webアプリケーション(ファイル、新規、Webサイト、C#、ASP .NET Webフォームサイト)に基づいたWebアプリケーションを開発しました。それはユーザーからのいくつかの整数値とテキスト値を受け取って、画像をサーバ側でjava.exe外部アプリケーションに渡し、画像解析をJava Derbyデータベースに書き込みます(コマンドで開始されます)。 java.exe -Xmx2G -jar filename .jar 5206 JAVA_DB org.apache.derby.jdbc.EmbeddedDriver jdbc:derby:C:/ folder ...)。 WebアプリケーションはWindows Server 2016上で動作し、IISではSQL Server 2016 Expressをインストールしました。ユーザーがログインすると、ファイルが処理されます。 Javaアプリケーション(商用)とIISは同じサーバーマシン上で実行されます。 今、私はデータベースからWebアプリケーションのC#にレコードを取得したかったのです。最後に、将来の分析のためにユーザが入力した値を画像解析でユーザアカウントに保存したいと考えています。タブ区切りのファイルをasp.net WebアプリケーションのC#に読み込む方法

  1. まず、SQL ServerからDerbyデータベースに接続する方法を探しましたが、それを実行するドライバが見つかりませんでした。一番近いのはEasySoft(Easysoftですが、私は理解していますが、500GBPなので、将来はそれを残しました)。 MicrosoftからDerbyからSQLに到達するためのコネクタがありますが、それは逆のようです。私が諦めた瞬間、将来はデータベースに到達するモバイルアプリを開発するための解決策を得たいと考えています。現時点では、SQLサーバーに書き込むこの商用Javaアプリケーション用のプラグインを開発するのに十分なJavaについてはわかりません。
    1. JavaアプリケーションとIISが同じマシン上にあるため、私はデータベースのディレクトリ構造に直接アクセスできますが、これは今作業する一時的な解決策です。データファイルはタブで区切られたファイルで、#で始まる最初の7行、列名(データが36列あります)、9行目が値(テキスト、整数、実数)です。行はありません。私は簡単にタブ区切りとしてExcelにファイルを読むことができ、興味のある3つの値はN9(列14、行9)、AE9(列31、行9)、およびAH9(列34、行9)です。すべての画像データは同じ形式になり、ファイルパスはキャッチです。これはExcelを使わないExcelインポートのタブ区切りファイルとしてこれを読んで、WebアプリケーションのC#の列#と行#を参照しようとするのが魅力的です。私はいくつかのLinQの例を見てきましたが、ヘッダの最初の行と最初の行と同じ数のデータが必要なようです。

私は自分の無知と我慢してください、(たとえば、他の何かをすることの30年後、ボーランドパスカルから戻っ)プログラミングに新しいです。このようなアプリケーションを開発するためのMicrosoft Virtual AcademyコースまたはChannel 9などのコース提案のようなものは非常に高く評価されます。私は8月の終わりまでにアプリケーションを終了する必要があるので、私はそれがエレガントで、ただ働く必要はありません。

ポイント1または2を解決するためのご意見をお待ちしております。

よろしく マルチン

+0

このライブラリを見てみた試してみてください。 http://www.filehelpers.net/ 私は自分自身一度それを使用しましたが、それはで動作するように非常に簡単で柔軟性のあるものとして私を打ちます。 –

答えて

0

データベース・プロバイダとして区切られたファイルを扱います魔法の接続文字列を使用することができます。次のコード例は、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]; 
+0

親愛なるジョン。私はある程度まであなたの事例を取り上げました:adapter.Fill(ds);エラーを生成します。System.Data.OleDb.OleDbException: 'Can not update。データベースまたはオブジェクトは読み取り専用です。 – Marcin

+0

親愛なるジョン。私はある程度まであなたの事例を取り上げました:adapter.Fill(ds);エラーを生成します。System.Data.OleDb.OleDbException: 'Can not update。データベースまたはオブジェクトは読み取り専用です。このファイルは、Windowsのフルアクセスです。その行にコメントして処理を続けると、そのテーブルのデータにアクセスする方法はわかりません。私はds.Table.Countを試してみると0になります。ファイルは空ではありませんが、そのようなタブのない8行で始まります:#some text [CRLFother text [CRLF .. // FirstHeader [tab] 2番目のヘッダ[tab] .. [CRLF] data1 [tab] data2 [tab]。 .. [CRLF]。ヘルプは非常に感謝しています。マルシン – Marcin

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 

メインパートプログラムを。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(); 
    } 

} 


} 

第2の部分は、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ステートメントは必要ありません。 よろしく マルチン

関連する問題