Announcement

Collapse
No announcement yet.

Compare files line by line

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Compare files line by line

    Hi.
    For some reason tables seem to be out of my mind's reach... so I need to ask for your help again...

    Basically there are 2 files - one "default" and one with custom data. Data should be copied into the "default" file but only in case it is not already copied (so only one copy should exist in the "default" file). I had a piece of code for that but it does not seem to work:

    Code:
    -- adding new data to UserNav.dat
    
    -- read user_nav.dat
    user_nav_dat = TextFile.ReadToTable("%UserNav%");
    
    -- read earth_nav11.txt
    earth_nav11_txt = TextFile.ReadToTable("%TempFolder%\\earth_nav11.txt");
    -- setting variables
    lines_table = {};
    inc = -1;
    
    -- remove any line from dat which exists in txt
    -- search the dat file for any line in the txt file
    for line_number_dat,line_content_dat in pairs(user_nav_dat) do
        for line_number_txt,line_content_txt in pairs(earth_nav11_txt) do
            -- skip empty strings
            if (String.TrimRight(String.TrimLeft(line_number_dat, " "), " ") ~= "" or String.TrimRight(String.TrimLeft(line_content_txt, " "), " ") ~= "") then
                -- compare the two strings
                if (String.TrimRight(String.TrimLeft(line_content_dat, " "), " ") == String.TrimRight(String.TrimLeft(line_content_txt, " "), " ")) then
                    -- entry found, put the line number in an array so we can remove it later
                    inc = inc + 1;
                    line_number_dat_new = line_number_dat - inc;
                    Table.Insert(lines_table, 1, line_number_dat_new);
                end
            end
        end
    end
    
    -- Remove the lines from user_nav.dat
    Table.Sort(lines_table, nil)
    for x,y in pairs(lines_table) do
        Table.Remove(user_nav_dat, y);
    end
    user_nav.dat - this is the "default" file
    earth_nav11.txt - this is the file with custom data

    The whole code for implementing the custom data into the "default" file works good but only unless there is no "conflicting" lines detected. If they are, data is messed up and few lines from the beginning of the "default" file are removed which makes the file useless.

    As far as I understand, both files' content is converted into a table and compared line by line. The idea is to remove from the "default" file ( user_nav.dat ) all lines which exist in the earth_nav11.txt ... Not sure if this description is clear at all...

  • #2
    OK, disregard. Instead of comparing lines I have used the keyword-based removal, works perfectly.

    Code:
     --From UserNav remove all lines which include the following keywords
    local tWords = { "keyword1", "keyword2", "keyword3" };
    local tInFile = TextFile.ReadToTable(SessionVar.Expand("%UserNav%"));
    local tOutFile = {};
    
    for i = 1, #tInFile do
        local bSkip = false;
        for j = 1, #tWords do
            if (String.Find(tInFile[i], tWords[j], 1, false) ~= -1) then
                bSkip = true;
                break;
            end
        end
        if not bSkip then
            Table.Insert(tOutFile, (#tOutFile + 1), tInFile[i]);
        end
    end
    
    TextFile.WriteFromTable(SessionVar.Expand("%UserNav%"), tOutFile, false);

    Comment

    Working...
    X