1) Программа получает список файлов с расширением txt из папки (файлы имеют русские названия), подсчитывает их кол-во
2) Программа записывает названия файлов в массив с помощью цикла от 1 до кол-ва файлов в папке
3) Программа получает список файлов другой папки (расширение html), также их записывает в другой массив
4) Программа проверяет есть ли в каждом из html файлов название 1, 2, 3... последнего) txt файлов. Если название есть, то она заменяет совокупность символов html файла, которые соответствуют названию txt файла на содержимое txt файла (содержимое - кириллица)
Пожалуйста, расскажите, для начала, как сделать 1) то есть получить список файлов директории в Lazarus, используя какие uses и пакеты и.т.д.
Я искал в интернете, нашел много тем, но везде в тексте программы, которая получает имена файлов есть неизвестная лазарусу функция
Например, на этой странице viewtopic.php?f=5&p=41477 каждый пример не работает! Мой лазарус не знает OutExt и SysToUTF8, я добавил в uses SysUtils, Graph, но нет. Не работает.
Ну и если посоветуете с 1, то также посоветуйте, пожалуйста, функции, которые позволяют работать с русскими файлами в директории, а также читать русские символы из файла, писать русские символы в файл, функция, возвращающая кол-во строк файла, если такая есть;
строки из файла 1 в файл 2 никак не перенести легче, чем цикл с writeln'ами?
html файл он также откроет как текстовый? проблем не будет?
Прошу говорить, какие модули используются, а то я уже устал копировать с форумов текст и получать "Identefer not found"
Заранее спасибо!
Добавлено спустя 5 часов 31 минуту 52 секунды:
1 я начал делать,
Но столкнулся с трудностями с русскими символами.
Прошу помочь с переводом чтоб их лазарус понимал, записывал в строки, а потом эти строки записывал в файлы.
Вот допустим код.
- Код: Выделить всё
uses
FileUtil, Dos;
Var
s: SearchRec;
MassivNameTxt: array [1..400000] of string;
koltxt: integer;
BEGIN
FindFirst('c:familiya*.txt',AnyFile,s);
koltxt:=0;
While DosError=0 do
begin
inc(koltxt);
With s do begin
MassivNameTxt[koltxt]:=(Name);
(Writeln(MassivNameTxt[koltxt]:12, Size:12));
end;
FindNext(s);
end;
writeln('txt:',koltxt:12);
Readln;
end.
Сейчас он выдает кракозябры
Посмотрел здесь функции, попробовал заменить FindFirst на FindFirstUTF8, но выдает еррор Error: Call by var for arg no. 3 has to match exactly: Got "Searchrec" expected "TSearchRec". Посмотрел вроде бы выходные и входные данныеу функций UTF8FindFirst и у FindFirst одинаковые. Странно. Еще пишет, что-то про winfileutil.
Как сделать, чтоб MassivNameTxt[1]
Добавлено спустя 8 минут 3 секунды:
Как сделать чтоб Massiv'ы и вообще строки могли быть сначала прочитаны в UTF8,
потом записаны в UTF8 и все операции могли быть сделаны в UTF8. Нашел кучу функций, являющихся альтернативами обычных
http://wiki.freepascal.org/fileutil
Их просто нужно использовать вместо обычных? Но почему тогда не работает Utf8FindFirst?
Прописал путь для папки winfileuntil в настройках компилятора.
Теперь сообщение перекидывает в модуль показывая функцию
- Код: Выделить всё
function FindFirstUTF8(const Path: string; Attr: Longint; out Rslt: TSearchRec): Longint;
begin
Result:=FindFirst_(Path, Attr, Rslt);
end;
Но у обычного FindFirst всё также! Так почему он работает, а эта функция не работает? 3 тип данных такой же в функциях, но FindFirstUTF8 говорит, что ей нужен TSearchRec
Добавлено спустя 11 минут 28 секунд:
Хех, этот тред потихоньку превращается в мой монолог

(надеюсь на форуме это не запрещено

В общем, еще погуглив я понял, что findfirst работает как с searchrec, так и с tsearchrec, а utf8findsearch только с tsearchrec модуля sysutils.
Подключил модуль sysutils и заработало. Буду держать вас в курсе событий
