我正在读取包含数千个代码的文本文件,但是代码的顺序如下。
First line: NS10 EW9
Second line: $1.91
Third line: $2.60
Fourth line: 42
我正在尝试在新列表中将第一行分为两行。
我修改了代码,但仍然存在另一个错误。这是索引超出范围异常错误。
int size = FaresFile.Length / 4 * 5;
int linecount = 0;
String[] split = new string[size];
conn.ConnectionString = "Data Source=***\\*** database=***; integrated security= true";
do
{
split = FaresFile[0].Split(' ');
cmd.CommandText = string.Format("INSERT INTO Fares Values ('{0}','{1}', '{2}', '{3}', '{4}' )", split[linecount], split[linecount + 1], split[linecount + 2], split[linecount + 3], split[linecount + 4]);
cmd.Connection = conn;
try
{
conn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
}
finally
{
conn.Close();
}
linecount = linecount + 5;
}while(linecount != split.Length);
我希望新列表看起来像这样。
First line: NS10
Second line: EW9
Third line: $1.91
Fourth line: $2.60
Fifth line: 42
我无法运行该程序,因为代码中有错误。
答案 0 :(得分:0)
我认为最好是使用两个数组。一种带有源数据,另一种包含修改后的数据。
从“源”数组中读取第一行,将其分成两部分,然后放入“输出”数组中。然后将源arra的第二,第三,第四和第五行复制(追加)到输出数组。 源的第六行必须在输出数组中分为两行。然后复制(附加)第7、8,...
答案 1 :(得分:0)
我不确定FaresFile的格式,但这是一些对我有用的代码。 (\ n是换行符)似乎您想使用''而不是“”,以便将其从字面上解释为字符。
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
string text = "NS10 EW9 \n $1.91 \n \n $2.60 \n 42";
List<String> split = text.Split(' ').ToList();
foreach(string item in split)
{
Console.WriteLine("List Item:" + item);
}
}
}
根据文件的格式,您可能需要删除空数组项。
答案 2 :(得分:0)
(在OP显着更改问题之前已回答)
我建议您采用以下方法读取整个文件并将其解析为一条语句,而不是只修正一条错误的行,以免循环:
using System.Linq;
using System.IO;
var allLines = File
.ReadAllLines(filepath)
.SelectMany(x => x.Split(new [] {' '}, StringSplitOptions.RemoveEmptyEntries))
.ToList();
其中 filepath 是您的输入文件。
注意:
答案 3 :(得分:0)
string inputFile = "{filepath to your input file}";
using (var conn = new SqlConnection())
{
conn.ConnectionString = "{your connection string}";
conn.Open();
File.ReadAllLines(inputFile)
.SelectMany(l => l.Split(new[] { ' '}, StringSplitOptions.RemoveEmptyEntries))
.Select(l => $"INSERT INTO Fares Values ('{l}')")
.ToList()
.ForEach(c =>
{
using (var cmd = new SqlCommand(c, conn))
{
cmd.ExecuteNonQuery();
}
});
}
与您的代码的重要区别是: