感谢Code Poet,我现在正在使用此代码解析目录中的所有.txt文件并将它们存储在数据库中。我需要更多的帮助,尽管...文件名是R303717COMP_148A2075_20100520.txt(中间部分每个文件都是唯一的)。我想添加一些代码,以便它能够解析出R303717COMP,并将该数据库的如左栏:(这不是我们唯一的R个)解析文件名,插入到SQL
R303717COMP data data data
R303717COMP data data data
R303717COMP data data data
etc
最后,我想要它将每个完整的文件名存储到另一个表中进行检查,以便它不会得到处理两次..任何帮助表示赞赏。
using System;
using System.Data;
using System.Data.SQLite;
using System.IO;
namespace CSVImport
{
internal class Program
{
private static void Main(string[] args)
{
using (SQLiteConnection con = new SQLiteConnection("data source=data.db3"))
{
if (!File.Exists("data.db3"))
{
con.Open();
using (SQLiteCommand cmd = con.CreateCommand())
{
cmd.CommandText =
@"
CREATE TABLE [Import] (
[RowId] integer PRIMARY KEY AUTOINCREMENT NOT NULL,
[FeatType] varchar,
[FeatName] varchar,
[Value] varchar,
[Actual] decimal,
[Nominal] decimal,
[Dev] decimal,
[TolMin] decimal,
[TolPlus] decimal,
[OutOfTol] decimal,
[Comment] nvarchar);";
cmd.ExecuteNonQuery();
}
con.Close();
}
con.Open();
using (SQLiteCommand insertCommand = con.CreateCommand())
{
insertCommand.CommandText =
@"
INSERT INTO Import (FeatType, FeatName, Value, Actual, Nominal, Dev, TolMin, TolPlus, OutOfTol, Comment)
VALUES (@FeatType, @FeatName, @Value, @Actual, @Nominal, @Dev, @TolMin, @TolPlus, @OutOfTol, @Comment);";
insertCommand.Parameters.Add(new SQLiteParameter("@FeatType", DbType.String));
insertCommand.Parameters.Add(new SQLiteParameter("@FeatName", DbType.String));
insertCommand.Parameters.Add(new SQLiteParameter("@Value", DbType.String));
insertCommand.Parameters.Add(new SQLiteParameter("@Actual", DbType.Decimal));
insertCommand.Parameters.Add(new SQLiteParameter("@Nominal", DbType.Decimal));
insertCommand.Parameters.Add(new SQLiteParameter("@Dev", DbType.Decimal));
insertCommand.Parameters.Add(new SQLiteParameter("@TolMin", DbType.Decimal));
insertCommand.Parameters.Add(new SQLiteParameter("@TolPlus", DbType.Decimal));
insertCommand.Parameters.Add(new SQLiteParameter("@OutOfTol", DbType.Decimal));
insertCommand.Parameters.Add(new SQLiteParameter("@Comment", DbType.String));
string[] files = Directory.GetFiles(Environment.CurrentDirectory, "TextFile*.*");
foreach (string file in files)
{
string[] lines = File.ReadAllLines(file);
bool parse = false;
foreach (string tmpLine in lines)
{
string line = tmpLine.Trim();
if (!parse && line.StartsWith("Feat. Type,"))
{
parse = true;
continue;
}
if (!parse || string.IsNullOrEmpty(line))
{
continue;
}
foreach (SQLiteParameter parameter in insertCommand.Parameters)
{
parameter.Value = null;
}
string[] values = line.Split(new[] {','});
for (int i = 0; i < values.Length - 1; i++)
{
SQLiteParameter param = insertCommand.Parameters[i];
if (param.DbType == DbType.Decimal)
{
decimal value;
param.Value = decimal.TryParse(values[i], out value) ? value : 0;
}
else
{
param.Value = values[i];
}
}
insertCommand.ExecuteNonQuery();
}
}
}
con.Close();
}
}
}
}
更新: 我想这一点,下面的建议,但没有去..在数据库列刚刚从文本文件随机填充的话。
string RNumber = Regex.Match(filename, @"(R.*)_.*_\.txt").Groups[1].Value;
insertCommand.Parameters.Add(new SQLiteParameter("@FileName", RNumber));
insertCommand.CommandText = @" INSERT INTO Files (FileName) VALUES (@Filename)
Regex.Match(文件名,@ “(R *)_ * _ \。TXT” ).Groups [1]。价值;将解析变量“filename”中的任何字符串,如果插入到数据库中的是“来自文本文件的随机单词”,那么变量文件名就是这样。问题不在于您更新后发布的代码,而是代码设置文件名的值。 – 2010-05-24 21:23:37
这是有道理的,我需要把我和用Directory.GetFiles方法代替'文件名'的变量。我正在尝试使用\\ mynetwrok \位置代替它.. :)谢谢! – 2010-05-24 21:38:41