Страница 1 из 1

О работе с текстовыми файлами

СообщениеДобавлено: 01.09.2010 20:14:56
MetallDoctor
Я не программировал уже пару лет(с тех пор, как выяснилось, что пол-проекта, написанные для сдачи диплома дописать не так важно, как составить обалденный отчёт), но тут разговорившись с одним знакомым в сети я сказал, что сам напишу программку, которая будет решать некую задачку лучше, чем любой виденный аналог. Теперь на спор вспоминаю программирование. Поскольку ещё в школе я начал изучать Pascal(и благодаря этому первые 2 курса программил чуть ли не лучше всех в группе), а в универе моим любимым языком стал Delphi, то теперь мой выбор пал на Lazarus, ибо во-первых пиратству объявлен бой, во-вторых политика Borland'а вызывает вопросы, а в-третьих ожидаю(по крайней мере разработчики обещают) относительно безгеморройное портирование на ставший таким родным Linux(как же меня сейчас раздражают очень многие кривости в винде... Ну просто ни в сказке сказать, ни матом выговориться).

С лирикой покончено.

Программулина на самом деле не сложная - просто интересная работа со строками - сначала строки берутся из одного из файлов(всего файлов 6), потом те строки, которые удовлетворяют кое-каким условиям заносятся в ListBox, после чего отобранные строки нужно склеить по кое-каким правилам.

Вопросов два.

Во-первых можно ли упаковать текстовые файлы к исполняемому файлу? Дело в том, что содержимое файлов меняться не должно, мне было проще составить файлы, чем генерировать их содержимое каждый раз, но при этом есть во-первых неудобно, что просто бинарник я передать не могу - нужно делать архив бинарник+текстовики(при чём запущенный из архива бинарник сам по себе не заработает - его сначала нужно распаковать и положить именно в папку с этими файлами), а во-вторых если кто-то исказит файлы то и результат программа даст неверный.
Альтернатива - строки из этих файлов можно сгенерировать - они содержат перебор всех вариантов комбинаций трёх символов, например файл "2.txt"(с комбинациями, длинной в 2 символа) выглядит примерно так:
Код: Выделить всё
00
01
02
10
11
12
20
21
22

Я потратил несколько часов на придумывание, как это сделать автоматиизированно, но потом просто за 10 минут наклепал 6 файлов для первых версий. Если кто не пожалеет и поделится алгоритмом буду очень сильно благодарен!

И во-вторых - есть у меня книжка "Delphi 7 в подлиннике"(Анатолий Хоменко, Владимир Гоффман, Евгений Мещеряков, Влпдимир Никифоров) насколько можно опираться на неё, как на справочник к Lazarus'у или лучше поискать спец-книги? Большинство материалов по Lazarus, которые я видел до сих пор не слишком интересны - либо включают только основные моменты, либо лезут очень глубоко вглубь. А мне нужно что-то вроде вот такой книжицы, только к лазарусу - полноценный справочник, описывающий максимум функционала, с чётко расписанными(как, например, здесь) функциями. А то, например, я на 96,5% уверен, что в IDE есть функция для получения части строки определённо длинны, начиная с определённой позиции, но не нахожу такой, приходится выдумывать...

Re: О работе с текстовыми файлами

СообщениеДобавлено: 02.09.2010 00:16:55
Odyssey
1.
Код: Выделить всё
procedure GetCombinations(AMinValue, AMaxValue, ALength: Integer;
  const AResult: TStringList; const ABuffer: String = '');
var
  I: Integer;
begin
  if Length(ABuffer) < ALength then
  begin
    for I := AMinValue to AMaxValue do
      GetCombinations(AMinValue, AMaxValue, ALength, AResult,
        ABuffer + IntToStr(I));
  end else
    AResult.Add(ABuffer);
end;

var
  StrList: TStringList;
begin
  StrList := TStringList.Create;
  GetCombinations(0, 2, 2, StrList);
  StrList.SaveToFile('2.txt');
  FreeAndNil(StrList);
end.


2. Опираться на неё при получении
части строки определённо длинны, начиная с определённой позиции
вполне можно, если в строке есть только символы латиницы и цифры. Если будет кириллица или что-то ещё, придётся делать поправку на Юникод (utf-8).
А мне нужно что-то вроде вот такой книжицы, только к лазарусу - полноценный справочник, описывающий максимум функционала, с чётко расписанными(как, например, здесь) функциями.
Она тут, разбитая на несколько частей, на английском. Более-менее законченного перевода в рунете я не видел. На русском есть книга, но там только азы.

Re: О работе с текстовыми файлами

СообщениеДобавлено: 07.10.2010 13:52:53
Climber
MetallDoctor писал(а):Вопросов два.

Во-первых можно ли упаковать текстовые файлы к исполняемому файлу? Дело в том, что содержимое файлов меняться не должно, мне было проще составить файлы, чем генерировать их содержимое каждый раз, но при этом есть во-первых неудобно, что просто бинарник я передать не могу - нужно делать архив бинарник+текстовики(при чём запущенный из архива бинарник сам по себе не заработает - его сначала нужно распаковать и положить именно в папку с этими файлами), а во-вторых если кто-то исказит файлы то и результат программа даст неверный.

Не очень понятна фраза "упаковать текстовые файлы к исполняемому файлу". Судя по тому, что выше упоминался ListBox, рискну предположить, что программа имеет ГУИ. Тогда исходные данные можно хранить в любом контроле со списком - ListBox, ComboBox, Memo и т. д. Ищем свойство Lines и сохраняем нужные строки в него в desing-time.

Добавлено спустя 1 минуту 7 секунд:
Ой, на дату не посмотрел... :oops: Своевременный совет, ничего не скажешь :mrgreen:

Re: О работе с текстовыми файлами

СообщениеДобавлено: 19.10.2010 21:13:43
MetallDoctor
Спасибо огромное за помощь. Извините пожалуйста за такую паузу - на работе был аврал, пришлось отложить всё, что делалось до себя. А после того как разгрёб не приходило вдохновение. Вернее приходил ужас - когда я погонял простенький цикл типа
Код: Выделить всё
for i:=1 to lenght(edit1.text) do showmessage(edit1.text[i]);
(не знаю, может у меня настроено что-то не так, но если в поле edit1 русские буквы, то я получаю полную ерунду! С английскими и цифрами - всё прекрасно) и понял, что по всей проге для нормальной работы придётся менять работу с русскими буквами на работу с кодами(в том плане, что например 'Г' это 0, 'К' это 1, а 'Н' это 2). Хорошо то, что Одиссей уже подсказал, как эти коды получить, за что и благодарю!
За материалы тоже спасибо!

И ещё раз извините за молчание.

Re: О работе с текстовыми файлами

СообщениеДобавлено: 19.10.2010 21:27:10
Mr.Smart
У вас как и у всех русскоязычных пользователей Лазарус используется кодировка UTF-8.
Вам Odyssey об этом уже намекал. Воспользуйтесь поиском по форуму и т.д.