从上传到内存的.txt文件中解析所需格式C#的文本
本文关键字:格式 文本 文件 内存 txt | 更新日期: 2023-09-27 18:11:59
这里对C#来说相当陌生
。。。我想做的是从上传到内存的.txt文件中解析一堆文本到网页。
以下是.txt文件的
。RES B7=121.RES C12=554.RES VMAX=4.7μV
再说一次,这种情况还会持续50年左右。RES。。。我已经成功地解析了它,但不是以所需的格式
以下是我希望它在网页上的显示方式
B7.........121
C12.........554
VMAX.........4.7μV
所有位于id="outpt"的隐藏面板内部。。。当前设置为可见="假">
这是我在C#页面中使用的代码
namespace Sdefault
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnUpld_Click(object sender, EventArgs e)
{
Stream theStream = file1.PostedFile.InputStream; //uploads .txt file to memory for parse
using (StreamReader sr = new StreamReader(theStream))
{
string tba;
while ((tba = sr.ReadLine()) != null)
{
string[] tmpArray = tba.Split(Convert.ToChar("=")); //Splits ".RES B7=121" to "B7"... but for some reason, It prints it as
//".RES B7.RES C12.RES VMAX"... I would ultimately desire it to be printed as shown above
Response.Write(tmpArray[0].ToString());
var.Text = tba;
outpt.Visible = true;
}
}
}
}
}
我应该朝哪个方向发展?
// Open the file for reading
using (StreamReader reader = new StreamReader((Stream)file1.PostedFile.InputStream))
{
// as long as we have content to read, continue reading
while (reader.Peek() > 0)
{
// split the line by the equal sign. so, e.g. if:
// ReadLine() = .RES B7=121
// then
// parts[0] = ".RES b7";
// parts[1] = "121";
String[] parts = reader.ReadLine().split(new[]{ '=' });
// Make the values a bit more bullet-proof (in cases where the line may
// have not split correctly, or we won't have any content, we default
// to a String.Empty)
// We also Substring the left hand value to "skip past" the ".RES" portion.
// Normally I would hard-code the 5 value, but I used ".RES ".Length to
// outline what we're actually cutting out.
String leftHand = parts.Length > 0 ? parts[0].Substring(".RES ".Length) : String.Empty;
String rightHand = parts.Length > 1 ? parts[1] : String.Empty;
// output will now contain the line you're looking for. Use it as you wish
String output = String.Format("<label>{0}</label><input type='"text'" value='"{1}'" />", leftHand, rightHand);
}
// Don't forget to close the stream when you're done.
reader.Close();
}
不确定您的格式,但简单的拆分和格式化就可以了。
在你的拆分中,你得到的是=
符号之前的所有东西,而从你的描述来看,你想要的是它之后的所有东西。例如
while(...)
{
var line = String.Format("<label>{0}< />.........textbox>{0}< />",tba.Split('=')[1]);
Response.Write(line);
}
如果你采取。RES B7=121,并将其拆分为"=",则索引0将为。RES B7,索引1为121
如果你想进一步细分,你将不得不再次使用Chr(32(拆分索引0,这将产生。RES为0,B7为1。
可以按照上面建议的字符串格式内联完成。
看起来你想要像这样的东西
String.Format("<label>{0}< />.........textbox>{1}< />",tba.Split('=')[0].Split(' ')[1],tba.Split('=')[1].);
好的。。你有几个问题。。
首先,使用=..进行拆分。。所以你把绳子分成两部分。。。.RES B7=121变为:tmpArray[0]=。RES B7tmpArray[1]=121
为了避免再次分裂,你能做的最好的事情就是更换。RES带空字符串:
tmpArray[0] = tmpArray[0].replace(".RES","");
然后,你应该在页面上的某个地方显示这一点,所以你应该写下:
Response.Write("<label>" + tmpArray[0].ToString() + "< />" + "<textbox>" + tmpArray[1].ToString() + "< />");
看起来您需要进行两次拆分:
第一个var tmpArr1 = tba.Split(' ')
将产生字符串阵列{".RES","B7=121"}
第二个var tmpArr2 = tmpArr1[1].split('=')
将产生字符串阵列{"B7","121"}
然后你可以做:
var line = String.Format("<label>{0}</label><textbox>{1}</textbox>",tmpArr2[0],tmpArr2[1]);
Response.Write(line);