我有一个看起来像这样的文件:
R.D. P.N. X Y Rot Pkg
L5 120910 64.770 98.425 180 SOP8
L4 120911 -69.850 98.425 180 SOIC12
L10 120911 -19.685 83.820 180 SOIC10
L9 120911 25.400 83.820 180 0603
L5 120910 62.484 98.425 180 SOP8
我有两个标有Xinput
和Yinput
标记的文本框。用户可以从这些文本框中输入值。输入值并且用户点击“GO”后,我想从文件中获取字符串,并将Xinput
值添加到X
列,将Yinput
值添加到文件中的Y
列。
我的意思......
因此,如果用户将“10.552”输入Xinput
文本框,将“ - 140.123”输入Yinput
文本框,则新数据看起来像这样:
R.D. P.N. X Y Rot Pkg
L5 120910 75.322 -41.698 180 SOP8
L4 120911 -59.298 -41.698 180 SOIC12
L10 120911 -9.133 -56.303 180 SOIC10
L9 120911 35.952 -56.303 180 0603
L5 120910 73.036 -41.698 180 SOP8
的问题: 的
答案 0 :(得分:1)
您可以使用ADO.Net将文件读取为结构化数据。有足够的样本用于使用ado.net
读取文本文件在ado数据集中以结构化格式获取后,您可以遍历并添加值。应该相当容易。
这是一篇好文章
答案 1 :(得分:0)
作为第一步介绍单入口的类,smth明显像
class Entry
{
public string Rd { get; private set; }
public string Pn { get; private set; }
public double X { get; set; }
// ... declare other properties
// Initializes a new instance of the Entry class
public Entry(string rawData)
{
if (rawData == null)
{
throw new ArgumentNullException("rawData", "Nullable data structure can not be processed");
}
string[] values = rawData.Split('\t');
if (values == null || values.Count() != 6)
{
throw new ArgumentException("rawData", "Invalid data structure can not be processed");
}
this.Rd = values[0];
Double.TryParse(values[2], out this.X);
// ....
}
}
构建此结构后,您可以轻松地将任何值添加到X,Y ...
逐行阅读文件: From MSDN
int counter = 0;
string line;
// Read the file and display it line by line.
System.IO.StreamReader file =
new System.IO.StreamReader("c:\\test.txt");
while((line = file.ReadLine()) != null)
{
Console.WriteLine (line);
counter++;
}
file.Close();
// Suspend the screen.
Console.ReadLine();
答案 2 :(得分:0)
试试这个,我没有你的文件所以这是一个最好的猜测。我敢肯定我没有遗漏太多东西。我知道这似乎有些过分,但你真的可以通过这种方式完全控制数据中的每个值。
public class ComponentLocation
{
public string ReferenceDesignator { get; set; }
public string PartNumber { get; set; }
public double xValue { get; set; }
public double yValue { get; set; }
public int Rotation { get; set; }
public string Package { get; set; }
}
public IEnumerable<ComponentLocation> ParseColumns(string fileName)
{
IEnumerable<string> rawData = File.ReadLines(fileName);
var rows = rawData.Skip(1).Select(l => l.Split('\t')).Select(str => new ComponentLocation
{
ReferenceDesignator = str[0],
PartNumber = str[1],
xValue = double.Parse(str[2]),
yValue = double.Parse(str[3]),
Rotation = int.Parse(str[4]),
Package = str[5]
});
return rows.ToList();
}
public void DoWork(double x, double y, string fileName)
{
var components = ParseColumns(fileName);
//Add values
foreach (var component in components)
{
component.xValue += x;
component.yValue += y;
}
//build file
StringBuilder sbData = new StringBuilder();
//header
sbData.AppendLine("R.D.\tP.N.\tX\tY\tRot\tPkg");
//data
foreach (var component in components)
{
sbData.Append(component.ReferenceDesignator).Append('\t');
sbData.Append(component.PartNumber).Append('\t');
sbData.AppendFormat("{0:###.###}", component.xValue).Append('\t');
sbData.AppendFormat("{0:###.###}", component.yValue).Append('\t');
sbData.Append(component.Rotation).Append('\t');
sbData.Append(component.Package).Append('\t').AppendLine();
}
//write
File.WriteAllText(fileName, sbData.ToString());
}
//call DoWork
DoWork(10.552, -140.123, @"C:\myfile.txt")
答案 3 :(得分:-1)
将整个文件内容读入StringBuilder
并尝试正则表达式。