用正则表达式: string s = ""; using(FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using(StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default)) { s = sr.ReadToEnd(); } }var matches = Regex.Matches(s, @"#([\w\W]*?)#[\w\W]*?#([\w\W]*?)#([\w\W]*?)#\*");foreach (Match m in matches) { var a = m.Groups[1].Value; var c = m.Groups[2].Value; var d = m.Groups[3].Value; }
你好 谢谢你 请问如果我想把 显示的数据保存到另一个txt该怎么做 我试过 用 StreamWriter 在 后面加了一行 StreamWriter se = new StreamWriter(@"..\..\..\..\..\..\..\data\sa.txt");
se.WriteLine(string.Concat(a + " " + b + " " + c + " " + d, Environment.NewLine)); se.Close(); 但它只能 读取最后一行 能帮我修改下 这一段吗 谢谢 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Text.RegularExpressions; namespace ConsoleApplication1 { class Program { static void Main(string[] args) {
string s = ""; using (FileStream fs = new FileStream(@"..\..\..\..\..\..\..\data\sa1.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default)) { s = sr.ReadToEnd(); } } var matches = Regex.Matches(s, @"#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#\*"); foreach (Match m in matches) { var a = m.Groups[3].Value.Replace(Environment.NewLine,""); var b = m.Groups[7].Value.Replace(Environment.NewLine, ""); var c = m.Groups[8].Value.Replace(Environment.NewLine, ""); var d = m.Groups[12].Value.Replace(Environment.NewLine, ""); Console.WriteLine(a+" "+b+" "+c+" "+d); StreamWriter se = new StreamWriter(@"..\..\..\..\..\..\..\data\sa.txt");
你这样 在循环中写文件效率恐怕会有点低啊。可以先存到一个变量中,最后一次性写入,例如: var sb = new StringBuilder(); foreach (Match m in matches) { var a = m.Groups[3].Value.Replace(Environment.NewLine,""); var b = m.Groups[7].Value.Replace(Environment.NewLine, ""); var c = m.Groups[8].Value.Replace(Environment.NewLine, ""); var d = m.Groups[12].Value.Replace(Environment.NewLine, ""); Console.WriteLine(a+" "+b+" "+c+" "+d); sb.Append(a+" "+b+" "+c+" "+d + "\r\n"); } StreamWriter se = new StreamWriter(@"..\..\..\..\..\..\..\data\sa.txt");
能大致打一下 cod 吗 谢谢 我是新手
大部分问题都解决了 但内容c还是无法识别
var query = lines.Select((x, i) => new { x, i }).GroupBy(x => x.i / 2).Select(x => string.Join("", x.Select(y => y.x)).Split('#'));
for (var item in query)
{
Console.WriteLine(item[1] + "\t" + item[2]);
}
for (var item in query) —— 是 foreach (var item in query)
代码没错
但只识别 内容a 与b
----------------------
qwe asd
qwe asd
qwe asd
因为txt文件很大
类似下面这样的段落 大概有50段吧 00278000000000181000450001000070000010100040000720000160001121000070002721100030
00346060007000376750003000447000017000479200002000649210002000669220002000689660
01900070970000700089#Compra#fre#Tempos modernos#Lisboa#19#Cinema#77#Chaplin, Char
les#n#g#m#037.CIN.001|ESJT|1#Lurdes#*
你好
string[] lines = File.ReadAllLines(@"..\..\..\..\..\..\..\data\sa.txt");
var query = lines.Select((x, i) => new { x, i }).GroupBy(x => x.i/2).Select(x => string.Join("", x.Select(y => y.x)).Split('#'));
foreach (var item in query)
{
Console.Write(item[3] + "#" + item[8] + "#" + item[9] + "#" + item[12] + "\n");
}
能为我讲解或修改下吗 var那段, 我不是很明白new { x, i }).GroupBy(x => x.i/2) 里面的数字 我试过修改数字 但是还是不能显示很多行 还有 有关于 #* 结尾的 代码 该怎么写
txt文档是这样的 有50段
下面只是一段 我但超过一定错误他就显示错误了 或者读取不出来 ...
---------------------------------------------------------------------------------------------------------------------------------------------
00278000000000181000450001000070000010100040000720000160001121000070002721100030
00346060007000376750003000447000017000479200002000649210002000669220002000689660
01900070970000700089#Compra#fre#Tempos modernos#Lisboa#19#Cinema#77#Chaplin, Char
les#n#g#m#037.CIN.001|ESJT|1#Lurdes#*------------------------------------------------------------------------------------------------------------------------------------------
string s = "";
using(FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using(StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default))
{
s = sr.ReadToEnd();
}
}var matches = Regex.Matches(s, @"#([\w\W]*?)#[\w\W]*?#([\w\W]*?)#([\w\W]*?)#\*");foreach (Match m in matches)
{
var a = m.Groups[1].Value;
var c = m.Groups[2].Value;
var d = m.Groups[3].Value;
}
我试过 用 StreamWriter 在 后面加了一行
StreamWriter se = new StreamWriter(@"..\..\..\..\..\..\..\data\sa.txt");
se.WriteLine(string.Concat(a + " " + b + " " + c + " " + d, Environment.NewLine));
se.Close();
但它只能 读取最后一行 能帮我修改下 这一段吗 谢谢
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string s = "";
using (FileStream fs = new FileStream(@"..\..\..\..\..\..\..\data\sa1.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default))
{
s = sr.ReadToEnd();
}
} var matches = Regex.Matches(s, @"#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#([\w\W]*?)#\*"); foreach (Match m in matches)
{
var a = m.Groups[3].Value.Replace(Environment.NewLine,"");
var b = m.Groups[7].Value.Replace(Environment.NewLine, "");
var c = m.Groups[8].Value.Replace(Environment.NewLine, "");
var d = m.Groups[12].Value.Replace(Environment.NewLine, "");
Console.WriteLine(a+" "+b+" "+c+" "+d);
StreamWriter se = new StreamWriter(@"..\..\..\..\..\..\..\data\sa.txt");
se.WriteLine(string.Concat(a + " " + b + " " + c + " " + d));
se.Close();
} }
}
}
var sb = new StringBuilder();
foreach (Match m in matches)
{
var a = m.Groups[3].Value.Replace(Environment.NewLine,"");
var b = m.Groups[7].Value.Replace(Environment.NewLine, "");
var c = m.Groups[8].Value.Replace(Environment.NewLine, "");
var d = m.Groups[12].Value.Replace(Environment.NewLine, "");
Console.WriteLine(a+" "+b+" "+c+" "+d);
sb.Append(a+" "+b+" "+c+" "+d + "\r\n");
} StreamWriter se = new StreamWriter(@"..\..\..\..\..\..\..\data\sa.txt");
se.WriteLine(sb.ToString());
se.Close();