If it fixed number of columns classic cross tab should work:
CREATE TABLE #Temp([File] INT, Main INT, Sub CHAR(2), [Text] VARCHAR(20));
INSERT INTO #Temp ([File], Main, Sub, [Text])
VALUES (1, 1, 'A.', 'hello'),
(1, 1, 'B.', 'SQL'),
(5, 1, 'A.', 'central'),
(5, 1, 'B.', '.com');
SELECT
[File]
,Main
,[A.] = MAX(CASE WHEN Sub = 'A.' THEN [Text] END)
,[B.] = MAX(CASE WHEN Sub = 'B.' THEN [Text] END)
FROM #Temp
GROUP BY [File], Main;
DROP TABLE #Temp;
--Vadim R.