子串抽取C#问题
我有一篇这样的文章子串抽取C#问题,c#,extract,substring,C#,Extract,Substring,我有一篇这样的文章 ======== 1079.tif Image Description : Vexcel-UCD-Level-3 ------------------ CAM_ID: UCD-SU-1-0018 [5] RECORD_GUID: 64763E99-3573-43AD-995B-8A07E3FE2BE3 IMG_NO: 1079 CAPTURE_TIME:
======== 1079.tif
Image Description : Vexcel-UCD-Level-3
------------------
CAM_ID: UCD-SU-1-0018 [5]
RECORD_GUID: 64763E99-3573-43AD-995B-8A07E3FE2BE3
IMG_NO: 1079
CAPTURE_TIME: 2004/03/15 02:07:17.641
IMG_TYPE: High resolution multi channel RGBI
ROTATION: 0 [degrees]
--- Inner Orientation ---------------
PRINCIPLE_DISTANCE: 101.400 [mm]
PRINCIPLE_POINT_X: 0.000 [mm]
PRINCIPLE_POINT_Y: 0.180 [mm]
PIXEL_SIZE_WIDTH: 9.000 [microns]
PIXEL_SIZE_HEIGTH: 9.000 [microns]
SENSOR_AREA_WIDTH: 103.500 [mm]
SENSOR_AREA_HEIGHT: 67.500 [mm]
-------------------------------------
--- Custom Meta Data ----------------
FMS No: 1079
Date: 070912
Time: 122005
Project: QOM
Area: QANAVAT
Line No: 11
Segment No: 1
Waypoint No: 17
WGS84 Latitude: N34.559857
WGS84 Longitude: E050.760726
WGS84 Altitude [m]: 1719.1
Pos Solution: GPS
Track [degree]: 271
Midpulse correction [s]: 0.00086
-------------------------------------
======== 1080vv.TIF
Image Description : Vexcel-UCD-Level-3
------------------
CAM_ID: UCD-SU-1-0018 [5]
RECORD_GUID: 64763E99-3573-43AD-995B-8A07E3FE2BE3
IMG_NO: 1080
CAPTURE_TIME: 2004/03/15 02:07:19.974
IMG_TYPE: High resolution multi channel RGBI
ROTATION: 0 [degrees]
--- Inner Orientation ---------------
PRINCIPLE_DISTANCE: 101.400 [mm]
PRINCIPLE_POINT_X: 0.000 [mm]
PRINCIPLE_POINT_Y: 0.180 [mm]
PIXEL_SIZE_WIDTH: 9.000 [microns]
PIXEL_SIZE_HEIGTH: 9.000 [microns]
SENSOR_AREA_WIDTH: 103.500 [mm]
SENSOR_AREA_HEIGHT: 67.500 [mm]
-------------------------------------
--- Custom Meta Data ----------------
FMS No: 1080
Date: 070912
Time: 122008
Project: QOM
Area: QANAVAT
Line No: 11
Segment No: 1
Waypoint No: 16
WGS84 Latitude: N34.559901
WGS84 Longitude: E050.758750
WGS84 Altitude [m]: 1717.9
Pos Solution: GPS
Track [degree]: 272
Midpulse correction [s]: 0.00086
-------------------------------------
正如您所见,它有一个循环,重复信息
我需要编写一个C程序从我的txt文件中提取所有这些类型的子字符串
"1080"
"Longitude: E050.758750."
"Latitude : N34.559901."
[m]: 1717.9"
有人能帮我吗
谢谢那些“.”部分可能是在翻译过程中丢失的CR、LF行结尾
显而易见的答案是使用正则表达式(RegEx),但您可能希望通过还原行和仅从某些行提取内容来进行一些预处理。我推测这是一个条件,即您的结果组来自1“行”。尤其是“1080”值可能很容易匹配错误
当您需要正则表达式方面的帮助时,请发回
在Lasse精彩的编辑之后,问题变得更加清楚了 通过查看数据,我可以说您实际上不需要正则表达式,但是您可以一次处理一行数据,并使用
line.StartsWith(…)
对它们进行分类。当你找到一行以(“==”)开头的“”时,你就喜欢“记录”的结尾+开头了。那些“.”部分可能是在翻译过程中丢失的CR,LF行结尾
显而易见的答案是使用正则表达式(RegEx),但您可能希望通过还原行和仅从某些行提取内容来进行一些预处理。我推测这是一个条件,即您的结果组来自1“行”。尤其是“1080”值可能很容易匹配错误
当您需要正则表达式方面的帮助时,请发回
在Lasse精彩的编辑之后,问题变得更加清楚了
通过查看数据,我可以说您实际上不需要正则表达式,但是您可以一次处理一行数据,并使用line.StartsWith(…)
对它们进行分类。当你找到一行以(“==”)开头的时,你喜欢一个“记录”的结尾+开头。正则表达式可能是一个很好的方法,但是因为我不太擅长,试试这个:
我想这就是你想要的
public ObjectOfMyFile ParseFile(string fileContent)
{
ObjectOfMyFile objectOfMyFile = new ObjectOfMyFile();
string[] contentLines = fileContent.Split(new[] { Environment.NewLine },
StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < contentLines.Length; i++)
{
string contentLine = contentLines[i];
if (contentLine.StartsWith("FMS No", StringComparison.OrdinalIgnoreCase))
{
string[] fmsNo = SplitByColon(contentLine);
if (fmsNo.Length == 2)
{
objectOfMyFile.Longitudes.Add(fmsNo[1].Trim());
}
continue;
}
if (contentLine.IndexOf("WGS84 Longitude", StringComparison.OrdinalIgnoreCase) > -1)
{
string[] longitudeKeyValue = SplitByColon(contentLine);
if (longitudeKeyValue.Length == 2)
{
objectOfMyFile.Longitudes.Add(longitudeKeyValue[1].Trim());
}
continue;
}
}
return objectOfMyFile;
}
public string[] SplitByColon(string valueToSplit)
{
return valueToSplit.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
}
public class ObjectOfMyFile
{
public ObjectOfMyFile()
{
Longitudes = new List<string>();
FmsNos = new List<string>();
}
public List<string> Longitudes { get; private set; }
public List<string> FmsNos { get; private set; }
// Etc...
}
}
public ObjectOfMyFile解析文件(字符串文件内容)
{
ObjectOfMyFile ObjectOfMyFile=新ObjectOfMyFile();
string[]contentLines=fileContent.Split(新[]{Environment.NewLine},
StringSplitOptions.RemoveEmptyEntries);
for(int i=0;i-1)
{
字符串[]longitudeKeyValue=SplitByColon(contentLine);
if(longitudeKeyValue.Length==2)
{
objectOfMyFile.longitues.Add(longitudeKeyValue[1].Trim());
}
继续;
}
}
返回myfile的对象;
}
公共字符串[]按冒号拆分(字符串值为拆分)
{
返回值tosplit.Split(新[]{:“},StringSplitOptions.RemoveEmptyEntries);
}
公共类ObjectOfMyFile
{
公共对象myfile()
{
经度=新列表();
FmsNos=新列表();
}
公共列表经度{get;private set;}
公共列表FmsNos{get;private set;}
//等等。。。
}
}
检查aray中是否有第二个vlaue时会有一些代码重复,但您可以让它变得更好您的self正则表达式可能是一个很好的方法,但由于我不擅长,请尝试以下方法:
我想这就是你想要的
public ObjectOfMyFile ParseFile(string fileContent)
{
ObjectOfMyFile objectOfMyFile = new ObjectOfMyFile();
string[] contentLines = fileContent.Split(new[] { Environment.NewLine },
StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < contentLines.Length; i++)
{
string contentLine = contentLines[i];
if (contentLine.StartsWith("FMS No", StringComparison.OrdinalIgnoreCase))
{
string[] fmsNo = SplitByColon(contentLine);
if (fmsNo.Length == 2)
{
objectOfMyFile.Longitudes.Add(fmsNo[1].Trim());
}
continue;
}
if (contentLine.IndexOf("WGS84 Longitude", StringComparison.OrdinalIgnoreCase) > -1)
{
string[] longitudeKeyValue = SplitByColon(contentLine);
if (longitudeKeyValue.Length == 2)
{
objectOfMyFile.Longitudes.Add(longitudeKeyValue[1].Trim());
}
continue;
}
}
return objectOfMyFile;
}
public string[] SplitByColon(string valueToSplit)
{
return valueToSplit.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
}
public class ObjectOfMyFile
{
public ObjectOfMyFile()
{
Longitudes = new List<string>();
FmsNos = new List<string>();
}
public List<string> Longitudes { get; private set; }
public List<string> FmsNos { get; private set; }
// Etc...
}
}
public ObjectOfMyFile解析文件(字符串文件内容)
{
ObjectOfMyFile ObjectOfMyFile=新ObjectOfMyFile();
string[]contentLines=fileContent.Split(新[]{Environment.NewLine},
StringSplitOptions.RemoveEmptyEntries);
for(int i=0;i-1)
{
字符串[]longitudeKeyValue=SplitByColon(contentLine);
if(longitudeKeyValue.Length==2)
{
objectOfMyFile.longitues.Add(longitudeKeyValue[1].Trim());
}
继续;
}
}
返回myfile的对象;
}
公共字符串[]按冒号拆分(字符串值为拆分)
{
返回值tosplit.Split(新[]{:“},StringSplitOptions.RemoveEmptyEntries);
}
公共类ObjectOfMyFile
{
公共对象myfile()
{
经度=新列表();
FmsNos=新列表();
}
公共列表经度{get;private set;}
公共列表FmsNos{get;private set;}
//等等。。。
}
}
有一些代码重复用于检查aray中是否有第二个vlaue,但您可以让自己变得更好您想用它做什么?你知道格式吗?非常感谢让我解释更多。。。这些信息是从航空图片中提取的,将用于地理测量问题这些是这些图片的元数据信息