c#如何读取文本中需要的字段内容(解决了再加分)
1、文本内容如下,内容很多,但有规律,以下标记的内容只是文本中的几行,其他的类似。SACI91RCTP272330METARRCFN272330Z32008KT9999F...
1、文本内容如下,内容很多,但有规律,以下标记的内容只是文本中的几行,其他的类似。
SACI91 RCTP 272330
METAR RCFN 272330Z 32008KT 9999 FEW028 BKN300 20/15 Q1016(A3001)
NOSIG=
SACI33 ZBYN 272330
METAR ZBYN 272330Z 08001MPS 4000 BR NSC M02/M05 Q1022 NOSIG=
2、我只需要其中"METAR"到"NOSIG="的内容。即提取
"METAR RCFN 272330Z 32008KT 9999 FEW028 BKN300 20/15 Q1016(A3001)
NOSIG="
"METAR ZBYN 272330Z 08001MPS 4000 BR NSC M02/M05 Q1022 NOSIG="
3、提取之后,我要对该内容拆分读取到数据库Access中,即Access表中的每条记录按以下字段存储,即"METAR","RCFN","272330Z","32008KT","9999","FEW028","BKN300",
"20/15","Q1016(A3001)","NOSIG="。
(我知道如何操作Access数据库,但不知道如何按上述想法读取文本想要的内容。
提供点建议方法也可以,能有较详细的代码提供更好,谢谢大家喽!^^)
本人主要玩 winform 窗体程序设计哈。 展开
SACI91 RCTP 272330
METAR RCFN 272330Z 32008KT 9999 FEW028 BKN300 20/15 Q1016(A3001)
NOSIG=
SACI33 ZBYN 272330
METAR ZBYN 272330Z 08001MPS 4000 BR NSC M02/M05 Q1022 NOSIG=
2、我只需要其中"METAR"到"NOSIG="的内容。即提取
"METAR RCFN 272330Z 32008KT 9999 FEW028 BKN300 20/15 Q1016(A3001)
NOSIG="
"METAR ZBYN 272330Z 08001MPS 4000 BR NSC M02/M05 Q1022 NOSIG="
3、提取之后,我要对该内容拆分读取到数据库Access中,即Access表中的每条记录按以下字段存储,即"METAR","RCFN","272330Z","32008KT","9999","FEW028","BKN300",
"20/15","Q1016(A3001)","NOSIG="。
(我知道如何操作Access数据库,但不知道如何按上述想法读取文本想要的内容。
提供点建议方法也可以,能有较详细的代码提供更好,谢谢大家喽!^^)
本人主要玩 winform 窗体程序设计哈。 展开
3个回答
展开全部
使用正则表达式匹配抽取需要的文本内容:
string pattern = @"METAR(.)+NOSIG=";
Regex reg = new Regex(pattern);
Match m = reg.Match(text);//text为文本中所有内容
while (m.Index > 0)
{
result.Add(m.Groups[1].Value);
m = m.NextMatch();
}
抽取到的内容都在result里了。
然后再讲result中每个字符串以空格分割(split(' ')),即可得到每一列的值。
正则部分目前没环境测试,如有错误请楼主做下调整。如果全部的文本中有换行,可能需要先将换行去掉
string pattern = @"METAR(.)+NOSIG=";
Regex reg = new Regex(pattern);
Match m = reg.Match(text);//text为文本中所有内容
while (m.Index > 0)
{
result.Add(m.Groups[1].Value);
m = m.NextMatch();
}
抽取到的内容都在result里了。
然后再讲result中每个字符串以空格分割(split(' ')),即可得到每一列的值。
正则部分目前没环境测试,如有错误请楼主做下调整。如果全部的文本中有换行,可能需要先将换行去掉
展开全部
const string filePath = @"文件路径";
var encoding = Encoding.Default; // 文件编码,根据需要调整
// 内容缓存
StringBuilder buffer = null;
using (var streamReader = new StreamReader(filePath, encoding))
{
while (true)
{
var line = streamReader.ReadLine();
if (line == null)
break;
if (line.StartsWith("METAR ")) // 如果一行以METAR 开头,则创建缓存加入该行
buffer = new StringBuilder(line);
else if (buffer != null) // 如果缓存已经创建,则将当前行添加入缓存进行处理。
buffer.Append(" " + line);
if( buffer == null || !buffer.ToString().EndsWith("NOSIG="))
continue; // 缓存未创建,或结束符不是NOSIG=,则没有内容需要处理,跳过
// 拆分内容
var strs = buffer.ToString().Split(' ');
Debug.Assert(strs.Length == 10);
//todo: 将拆分的各个部分存在的数据库中
buffer = null;
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对啊 用正则
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询