Search code examples
c#substringvisual-studio-2019diff.net-4.5

Extract paths from a diff file


I am trying to extract the paths from a diff file using below piece of code:

    string diff = "--- //mac/Home/Documents/myFile1.txt\n+++ //mac/Home/Downloads/myFile2.txt\n@@ -1,1 +1,1 @@\n-hol3a2aaaa2!!!!!!\n+hol3aaa2!!!!!!";

    int pos1 = diff.IndexOf("--- ");
    int pos2 = diff.IndexOf("\n+++ ");
    string finalString = diff.Substring(pos1 + 4, pos2 - 4);
    Console.WriteLine(finalString);
    
    pos1 = diff.IndexOf("+++ ");
    pos2 = diff.IndexOf("\n@@");
    finalString = diff.Substring(pos1 + 4, pos2 - 4);
    Console.WriteLine(finalString);

First path is successfully extracted but second isn't. What am I doing wrong?

Output:

//mac/Home/Documents/myFile1.txt
//mac/Home/Downloads/myFile2.txt
@@ -1,1 +1,1 @@
-hol3a2aaaa2!!!!!!
+

Expected:

//mac/Home/Documents/myFile1.txt
//mac/Home/Downloads/myFile2.txt

Solution

  • the substring is defined like this: public string Substring (int startIndex, int length);

    The first one works out fine because Pos1 is correct and the lenght is the first path. The seconnd one uses Pos1 correct, but the length is Path 1 + Path 2.

    To make it easier to understand:

    string diff = "--- //mac/Home/Documents/myFile1.txt\n+++ //mac/Home/Downloads/myFile2.txt\n@@ -1,1 +1,1 @@\n-hol3a2aaaa2!!!!!!\n+hol3aaa2!!!!!!";
    
    int pos1 = diff.IndexOf("--- ");
    int pos2 = diff.IndexOf("\n+++ ");
    string finalString = diff.Substring(pos1 + 4, pos2 - 4);
    Console.WriteLine(pos1);
    Console.WriteLine(pos2);
    Console.WriteLine(finalString);
    
    pos1 = diff.IndexOf("+++ ");
    pos2 = diff.IndexOf("\n@@");
    finalString = diff.Substring(pos1 + 4, pos2 - 4);
    Console.WriteLine(pos1);
    Console.WriteLine(pos2);
    Console.WriteLine(finalString);
    

    You will see pos2 in the second time is much bigger than first time.Try

    string[] tempStringArray = diff.Split('\n');
    string finalStringOne = tempStringArray[0].Replace("--- ","");
    string finalStringTwo = tempStringArray[1].Replace("+++ ","");