使用 VS08 C#窗口。我有 txt文件。读完文件后,我需要将文件信息存储在数据库中。我的 SQL Server 数据库表结构如下:
CREATE TABLE [dbo].[StoreTxtValues]
(
[PortCode] [int] (80) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
1)[Vessel] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
2)[Voyage] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
3)[Sailed] [datetime] NOT NULL,
4)[Carrier] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
5)[LoadingContainer] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
6)[DischargeSeal] [varchar] (800) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
7)[rowValue] [varchar] (8000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
)
请在图片中查看这些数字。我需要帮助来存储我描述的数据。任何建议都将被接受。提前谢谢。
答案 0 :(得分:2)
逐行解析文件以获取所需信息。使用System.IO.FileStream
或StreamReader
加载数据,然后您可以根据需要进行处理。将其保存到数据库中。
以下是使用here中的StreamReader
的快速示例。
using (StreamReader sr = new StreamReader(path))
{
while (sr.Peek() >= 0)
{
string lineFromFile = sr.ReadLine();
//now parse the string lineFromFile and get the information you need
}
}
我可能会补充一点,创建对象来表示您需要存储的各种数据可能会有所帮助。然后,该对象可以更容易地处理数据,将其保存到数据库等。
解析字符串(这假定文件的格式完全相同,即相同的信息行)。
跟踪你在哪条线上。
string[] myFile = File.ReadAllLines(@"C:\file.txt");
var lineCount = myFile.Length;
for(i=0; i<lineCount; i++)
{
switch(i)
{
case 0:
//parse line 0
break;
case 1:
//parse line 1
break;
case 2:
//parse line 2
break;
//and so on until you get to the line that begins the regular "records" part of the file
}
if(i >= 10) //assumes line 10 is where the regular "records" start
{
//parse the record like so
string[] columns = myFile[i].Split('\t'); //this assumes your columns are separated by a tab. If it's a space you would use myFile[i].Split(' '), etc.
//now you have an array with all your columns
foreach(string column in columns)
{
//now do what you want with the information
}
}
}
}
答案 1 :(得分:-1)
关于理查兹的回答,
在我看来,你需要多个表格。
表1可能被称为ManifestHeader并包含1-6列。
表2可能被称为ManifestDetails并包含第7列(可以分解为其他字段,例如LoadingContainer,DischargeSeal,Dest等)。
您的数据是固定宽度和逗号分隔的混合(第6列),您可以使用String.Substring和String.Split来分隔行列。
e.g。
using System;
using System.Collections.Generic;
using System.IO;
using System.Collections;
public class MyClass
{
public static void ProcessFile()
{
TextReader textReader = new StreamReader(@"C:\DEV\DATA\MyDataFile.txt");
string s = textReader.ReadLine();
string col1 = s.Substring(9, 29).Trim();
s = textReader.ReadLine();
string col2 = s.Substring(9, 29).Trim();
s = textReader.ReadLine();
string col3 = s.Substring(9, 29).Trim();
s = textReader.ReadLine();
string col4 = s.Substring(9, 29).Trim();
s = textReader.ReadLine();
s = textReader.ReadLine();
s = textReader.ReadLine();
s = textReader.ReadLine();
s = textReader.ReadLine();
s = textReader.ReadLine();
s = textReader.ReadLine();
string col5 = s.Split(",")[0].Trim();
string col6 = s.Split(",")[1].Trim();
while ((s = textReader.ReadLine()).Trim() != "")
{
string LoadingContainer = s.Substring(0, 10).Trim();
string DischargeSeal = s.Substring(13, 23).Trim();
string Dest = s.Substring(25, 25).Trim();
// Parse further colums here...
// Insert record into the database
}
}
public static void Main()
{
try
{
ProcessFile();
}
catch (Exception e)
{
string error = string.Format("---\nThe following error occurred while executing the program:\n{0}\n---", e.ToString());
Console.WriteLine(error);
}
finally
{
Console.Write("Press any key to continue...");
Console.ReadKey();
}
}
}