1.
Das erste Element eines Strings hat den Index 1, nicht 0.
Die innere Schleife müsste also so aussehen:
for i := 1 to length(namen[j]) do
2.
length(name[i])
gibt dir sehr Wahrscheinlich immer 1 zurück, da name[i] nur ein Zeichen (des Strings) ist
Wenn du den String von 1 bis zur Position i-1 haben willst, müsste das wohl so aussehen:
copy(name, 1, i - 1);
Überlege selbst, wie nun das zweite Copy aussehen müsste.
3. Tipps:
Du kannst dir das Leben viel einfacher machen, denn es gibt die Funktion:
function Pos(const substr: string; const str: string): Integer;
Diese gibt dir die Position eines Substrings in einem String zurück.
Du könntest z.B. ' ' (Leerzeichen) als Substring übergeben und sparst dir somit die innere Schleife
i := Pos(' ', name);