簡體   English   中英

子串提取C#問題

[英]substring extract C# problem

我有這樣的文字....

======== 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完成出色的Edit之后,問題變得更加清晰了。

通過查看數據,我會說您確實不需要RegEx,但是您可以一次處理1行數據,並使用line.StartsWith(...)對它們進行分類。 當您找到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...
    }
}

這是一些重復的代碼,用於檢查是否有第二個vlaue,但是您可以使自己更好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM