所以我昨天得到了一些帮助,但现在我需要做出改变,我的改变似乎不起作用。想看看有人会帮我解决我做错的事。
以下是
中读取的文件示例现在最初这是读取0.264
的FSD编号,然后读取3.4572
第一列中的第一个数字以及该列的最后一个数字。这很好。但现在我知道FSD号码需要更长时间,我不再需要第一个号码3.4572
。相反,我需要在最后一列中没有0.00
的第一个数字,然后仍然是最后一个数字。所以这就是我所拥有的,但它根本没有抓住任何东西,if (dataWithAvgVolts.Count() > 1)
被跳过了。
public partial class FrmTravelTime : Form
{
const string FSD__Line_Identifier = "Drilling Data";
const string Data_Start_Point_Identifier = "AVG_VOLTS";
const string Spark_Point_Identifier = "0.00";
static readonly char[] splitter = { ' ', '\t' };
public FrmTravelTime()
{
InitializeComponent();
}
private void btnCalculate_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in DGV_Hidden.Rows)
{
FileInfo info = new FileInfo();
{
var lines = File.ReadAllLines(row.Cells["colfilelocation"].Value.ToString());
var fsdLine = lines.FirstOrDefault(line => line.Contains(FSD__Line_Identifier));
var dataWithAvgVolts = lines.SkipWhile(line => line.Contains(Data_Start_Point_Identifier + Spark_Point_Identifier + FSD__Line_Identifier)).ToList();
if (dataWithAvgVolts.Count() > 1)
{
var data = dataWithAvgVolts[1].Split(splitter);
info.startvalue = Convert.ToDouble(data[0]);
data = dataWithAvgVolts[dataWithAvgVolts.Count - 1].Split(splitter);
info.endvalue = Convert.ToDouble(data[0]);
}
info.finalnum = info.startvalue - info.endvalue;
}
}
}
public class FileInfo
{
public double startvalue;
public double endvalue;
public double firstnum;
public double finalnum;
}
所以你在这里看到最后没有0.00
的第一行是
3.0164 7793 1 0 0.159 0.02
因此我的info.startvalue
将为3.0164
直到最后一行直到最好的100行
2.7182 8089 0 0 0.015 22.19
所以我的info.endvalue
应为2.7182
@Amit
var lines = File.ReadAllLines(row.Cells["colfilelocation"].Value.ToString());
var fsdLine = lines.FirstOrDefault(line => line.Contains(FSD__Line_Identifier));
info.FSD = fsdLine.Substring(fsdLine.IndexOf(FSD_Identifier) + FSD_Identifier.Length, 7);
var dataWithAvgVolts = lines.SkipWhile(line => !line.Contains(Data_Start_Point_Identifier)).ToList();
var data = lines.Where(line => (!line.Contains(Data_Start_Point_Identifier) && !line.Contains(FSD__Line_Identifier) && !line.EndsWith("0.00"))).ToList();
if (data.Count > 1)
{
var line = data[0];
var tempdata = data[0].Split(splitter);
info.startvalue = Convert.ToDouble(tempdata[0]);
var thisdata = data[data.Count - 1].Split(splitter);
info.endvalue = Convert.ToDouble(thisdata[0]);
}
答案 0 :(得分:1)
您的SkipWhile条件不正确。
line => !line.Contains(Data_Start_Point_Identifier + Spark_Point_Identifier + FSD__Line_Identifier)
意味着AVG_VOLTS0.00Drilling Data
。你是说,跳过文本文件,直到该行不包含AVG_VOLTS0.00Drilling数据。你在任何地方都没有这一行。所以,基本上,你似乎正在跳过整个文件。提出一个其他条件,这将有效。
此行返回所有没有“钻取数据”字,“AVG_VOLTS”字的行,并且不以“0.00”结尾。
var data = lines.Where(line=>(!line.Contains(Data_Start_Point_Identifier) && !line.Contains(FSD__Line_Identifier) && !line.EndsWith("0.00"))).ToList();
然后,取出行,然后处理。
如果条件可以
if (data.Count > 1)
{
var line = data[0];
var tempdata = data[0].Split(splitter);
info.startvalue = Convert.ToDouble(tempdata[0]);
var thisdata = data[data.Count - 1].Split(splitter);
info.endvalue = Convert.ToDouble(thisdata[0]);
}