Считать все строки с обоих файлов (второй - аппендом в коллекцию первого), сделать Select -> ToWords
GroupBy по первому слову в каждой строке
Выкинуть все группы, в которых по одному элементу (Where)
Select оставшихся в одну строку
Записать в файл.
Класс не нужен, однострочненько вышло (реально ж одна строка ). Писать лень, к .NET уже лет 5 не прикасался =3 Во. Модно, молодежно, и бессмысленно. Скучно было.
Мой вариант расширяемый, я так понимаю что строчки это не просто несколько случайных слов. Если их значения что то значат - лучше описать класс для хранения этой строчки (только вместо array of string - надо поля определённых типов, но это к ТС).
Ну, если уж делать монстра:
begin
ReadLines('1.txt')
.Cartesian(ReadLines('2.txt'), (l1,l2)->(l1.ToWords,l2.ToWords))
.Where(t->t[0][0]=t[1][0])
.Select(t-> (t[0]+t[1].Skip(1)).JoinToString )
.WriteLines('3.txt');
end.
BigInteger это не базовый тип как integer или int64. То есть, его не поддерживает процессор напрямую. А значит этот тип реализован как запись, которую надо инициализировать (то есть вызвать какой то метод).
Самый прямой способ сейчас - так:
begin
var x := BigInteger.Parse('9999999999999999999999999999999999');
end.
Хотя, конечно, парсить из строки это не хорошо…
@Admin вообще есть довольно хороший способ добавить поддержку литералов типа BigInteger: Можно использовать метод .ToByteArray и соответствующий конструктор.
То есть такой код:
begin
var x := 99999999999999999999999999999999999999;
end.
Разворачивать в:
begin
var x := new BigInteger(new byte[](255, 255, 255, 255, 63, 34, 138, 9, 122, 196, 134, 90, 168, 76, 59, 75));
end.
Тут последовательность байт - это то, что вернёт BigInteger.Parse(...).ToByteArray, которое легко выполнить внутри компилятора.
Представьте, что все сделали, как Вы описали. Я в программе вижу строку
var k := 9223372036864775807;
И? Какой тип имеет k? int64 или BigInteger? А не секрет, что большинство операций и функций для BigInteger или иначе выглядят, или отсутствуют. Получается трудночитаемый код. И ради чего?
Вы бы посмотрели что делает .Net-овский парсинг. Они в погоне за глобализацией сделали так что даже парсинг целых в несколько раз медленнее StrToInt из PABCSystem. Там куча лишних вызовов и проверок.
Я вот заметил, что у Вас прямо какое-то болезненное восприятие чужих кодов - они все такие неоптимальные, уродливые, тормозные, кривые, … Ну хорошо, парсинг “плохой”. Какое количество констант типа BigInteger должна получить программа, чтобы это было реально видно?
По объявлению Бернарда Шоу, что мастер ищет хорошую стенографистку,
пришла молодая барышня.
- Сэр, я могу стенографировать со скоростью 200 слов в минуту.
Шоу озадаченно почесал затылок:
- Где же я вам возьму столько слов?
Вы бы сами подумали над этим вопросом, вместо того чтоб по привычно шаблонно отвечать “это не надо, это я не знаю где использовать”. Хотя бы взять подпрограмму вызываемую в цикле.
Да можно и десять циклов вложить друг в друга и вызывать, но зачем ??? Зачем в цикле что-то вызывать с множеством констант типа BigInteger? Вы оперируете чисто академическими понятиями, а я привык мыслить практически. Если это на практике не нужно (либо нужно редко и единично) - не нужно засорять этим язык. Да, в таких случаях я отвечаю “привычно и шаблонно”. Извините, бОльшую часть жизни в СССР прожил, привык прикидывать полезность каждой идеи, а не “чтобы было”.