Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析文件名,插入到SQL_C# - Fatal编程技术网

C# 解析文件名,插入到SQL

C# 解析文件名,插入到SQL,c#,C#,多亏了CodePoter,我现在正在使用这段代码解析目录中的所有.txt文件,并将它们存储在数据库中。不过我需要更多的帮助。。。文件名为R303717COMP_148A2075_20100520.txt(每个文件的中间部分是唯一的)。我想在代码中添加一些东西,以便它能够解析出R303717COMP,并将其放在数据库的左栏中,例如:(这不是我们唯一的R编号) 最后,我想让它将每个完整的文件名存储到另一个检查的表中,这样它就不会被处理两次。。感谢您的帮助 using System; using S

多亏了CodePoter,我现在正在使用这段代码解析目录中的所有.txt文件,并将它们存储在数据库中。不过我需要更多的帮助。。。文件名为R303717COMP_148A2075_20100520.txt(每个文件的中间部分是唯一的)。我想在代码中添加一些东西,以便它能够解析出R303717COMP,并将其放在数据库的左栏中,例如:(这不是我们唯一的R编号)

最后,我想让它将每个完整的文件名存储到另一个检查的表中,这样它就不会被处理两次。。感谢您的帮助

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(); 
            } 
        } 
    } 
} 

如果模式始终为xxxxx_anythingelse.txt,则可以使用以下命令解析出xxx:

strFileName.Substring(0,strFileName.IndexOf("_"));

以下是给定文件名的方法,用于获取“\ux”之前的第一部分

然后你可以把它放在任何你想放的地方

strFileName.Split('_').First()

在名称空间中使用System.LINQ…这将起到作用….

好的,我尝试了这个。。。字符串RNumber=Regex.Match(文件名@“(R.*.*.\.txt”).Groups[1]。值;添加(新的SQLiteParameter(“@FileName”,RNumber));insertCommand.CommandText=@“插入文件(文件名)值(@FileName)但不允许…”数据库只是用文件本身的随机字填充该列。有帮助吗?数据库不会“用文件本身的随机字填充该列”“,您正在通过解析错误的内容(即文件内容而不是文件名)向数据库中插入随机词。字符串RNumber=Regex.Match(filename,@”(R.*)_..\.txt”)。组[1]。值;解析文件名?我想我不明白你的意思?谢谢你的帮助!这将返回文件名开头带有r的部分,如果需要整个文件名,则只需输入文件名即可。我以为您希望r-number本身和整个文件名将其放在db.Regex.Match(filename,@“(r.*.*.\.txt”).Groups[1]的特定部分中;将解析变量“filename”中的任何字符串,如果要插入到数据库中的是“文本文件中的随机词”,那么这就是变量filename中的内容。问题不在于您在更新下面发布的代码,而在于代码设置文件名值的原因。这很有意义,我需要将我使用的变量与Directory.GetFiles方法一起放在“filename”的位置。我试图使用\\mynetwrok\位置来代替它:)谢谢
strFileName.Substring(0,strFileName.IndexOf("_"));
string RNumber = Regex.Match(filename, @"(R.*)_.*_\.txt").Groups[1].Value; 
strFileName.Split('_').First()