300 Zeilen ist wenig, selbst 1000 sind noch wenig. StringGrids werden so ab 10.000 ziemlich verschwenderisch.
Also ich würde die Aufgaben erst mal aufsplitten, StringGrid Reihen sind normale TStrings.
1) Funktion zum Vergleichen von TStrings (evtl ginge sogar ein Vergleich von DelimitedText)
2) Schleife die ungleiche TStrings in einem Grid oder Array sammeln
3) Das Grid (oder Array), das gesammelt hat in das andere kopieren
1)
Delphi-Quellcode:
function StrListEqual(StringsA, StringsB : TStrings):Boolean;
var
i, Count : Integer;
begin
Result := False;
Count := StringsA.Count;
if Count = StringsB.Count then
begin
i := 0;
while i < Count do
if StringsA[i] <> StringsB[i] then Exit;
Result := True;
end;
end;
3)
Delphi-Quellcode:
procedure CopyStringGrid(FromGrid, ToGrid : TStringGrid);
var
i, Count : Integer;
begin
Count := FromGrid.RowCount;
ToGrid.RowCount := Count;
for i := 0 to Count-1 do
ToGrid.Rows[i].Assign(FromGrid.Rows[i]);
end;
Fehlt noch die Aufgabe 2)
StringGrid B zeilenweise mit A Vergleichen und bei Bedarf an A anhängen. Danach A -> B kopieren. Der Vergleich kann noch mit UpperCase CaseInsensiv gestaltet werden. bei neueren Delphi-Versionen kann auch DelimitedText mit CompareStr verglichen werden.