Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2009, 22:53   #1
keef
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 61
По умолчанию Считывать фрагмент Memo

Долго копался, но не смог довести до ума, за дельфи всего пару недель, просьба помочь.

Есть файл file.txt, в нём хранятся данные такого формата:
Цитата:
24.10 пример1 ;
24.11 пример2 ;
20.9 пример ;
В форме есть компонент TMemo и календарь, соответственно по дабл клику на числе он загружает нужное из файла в Memo до точки с запятой.

Вопрос в том как это реализовать, прошу помочь.
keef вне форума Ответить с цитированием
Старый 12.12.2009, 23:15   #2
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
По умолчанию

Здравствуйте!
можно так к примеру
Код:
procedure TForm1.Calendar1Change(Sender: TObject);
var
 f: TStringList;
 i: integer;
begin
 f := TstringList.Create();
 f.LoadFromFile('file.txt');
 for i:= 0 to f.Count-1 do
   if Pos(Inttostr(Calendar1.Day) + '.',f.Strings[i]) <> 0 then
    Begin
     Memo1.Text := f.Strings[i];
     break;
  end;
 f.Free;
end;
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо
rockedit вне форума Ответить с цитированием
Старый 13.12.2009, 00:10   #3
keef
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 61
По умолчанию

Спасибо большое ) а можно сделать чтобы число не читалось ?

Последний раз редактировалось keef; 13.12.2009 в 00:12.
keef вне форума Ответить с цитированием
Старый 13.12.2009, 00:22   #4
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
По умолчанию

Конечно можно
Код:
procedure TForm1.Calendar1Change(Sender: TObject);
var
 f: TStringList;
 i,index,j: integer;
 S: String;
begin
 index:=0;
 f := TstringList.Create();
 f.LoadFromFile('file.txt');
 for i:= 0 to f.Count-1 do
   if Pos(Inttostr(Calendar1.Day) + '.',f.Strings[i]) <> 0 then
    Begin
     S:= f.Strings[i];

      for j:=0 to length(S) do
       if s[j] <> ' ' then
        inc(index) else
        break;
     Memo1.Text := Trim(Copy(S, index,length(s)));
     break;
  end;
 f.Free;
end;
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо

Последний раз редактировалось rockedit; 13.12.2009 в 00:26.
rockedit вне форума Ответить с цитированием
Старый 13.12.2009, 17:51   #5
keef
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 61
По умолчанию

rockedit, если не сложно можно второй пример как можно подробнее прокомментировать, а там уже сам буду доробатывать.
keef вне форума Ответить с цитированием
Старый 13.12.2009, 20:30   #6
rockedit
Форумчанин
 
Аватар для rockedit
 
Регистрация: 18.03.2009
Сообщений: 109
По умолчанию

Код:
procedure TForm1.Calendar1Change(Sender: TObject);
var
 f: TStringList; { грубо гворя это набор строк, строки считаються от 0
файл в эту "переменную" считываеться построчно
} 
i,index,j: integer;
 S: String;
begin
 index:=0;
 f := TstringList.Create(); // создаем 
 f.LoadFromFile('file.txt');// считываем содиржимое файла в f, построчно
{
цикл по кол-ву строк
до Count-1 т.к. строку номируються с 0
а если етсь хоть одна строка то Count = 1 а ее номер 0
т.е. строки с индексом Count не существует
}
 for i:= 0 to f.Count-1 do
{
функи Pos(s: string,s1,string) работает следуюшим образом
она исчит есть ли подстрока s в строке s1 и если да то возврашает нам
номер символа с которога начинаеться
подстрока s в строке s1, точка я в конце поставил по тому, что иначе 
для Pos 1,11,12,13,14,15,16,17,18,19 это будет одно и тоже
аналогично для 2 т.е. 2,21,22...
если подстрока не найдена Pos вернет 0
}
   if Pos(Inttostr(Calendar1.Day) + '.',f.Strings[i]) <> 0 then
    Begin
     S:= f.Strings[i];
// нашли подстроку, тепреь нужно отсеять число в начале
      for j:=0 to length(S) do
// по длине строки, функция length возврашает длину строки
       if s[j] <> ' ' then {
так как у нас формат строк
12.12 привет;
24.11 ророро;
то мы ишим первый первый пробел в этой строке, он
же разделитель числа и фразы
пока пробел не найден мы нарашиваем счетчик index
}
        inc(index) else
        break; //пробел найде, выходим
{
trim - удаляет пробелы в начале строки т.е. к примеру
Trim('       привет') = 'привет', функция Copy копирует символы строки
S с символа index по length(S), т.е. до конца строки, тут может стоять
лбое число не меньшее чем index 
}
     Memo1.Text := Trim(Copy(S, index,length(s)));
     break;
  end;
 f.Free; //очишаем память
end;
Мозг человека обычно загружен лишь на 10% своей мощности; остальное резерв для опереционной системы. Если помог не пожалей "+", это лучшее спасибо
rockedit вне форума Ответить с цитированием
Старый 14.12.2009, 16:42   #7
keef
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 61
По умолчанию

Спасибо, буду разбираться.
keef вне форума Ответить с цитированием
Старый 30.12.2009, 15:04   #8
keef
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 61
По умолчанию

Цитата:
Сообщение от rockedit Посмотреть сообщение
Код:

   if Pos(Inttostr(Calendar1.Day) + '.' + IntToStr(Calendar1.Month)'.',f.Strings[i]) <> 0 then
с этим вот проблемка
дописал ещё чтобы по месяцу смотрел, но всё равно для него число 5 и 25 одно и тоже и на обоих числах он видит одинаковые записи, ещё проблемка то что месяц не учитывается, тоесть на каждом месяце он показывает заметки на числе 5 и 25
keef вне форума Ответить с цитированием
Старый 06.01.2010, 14:16   #9
keef
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 61
По умолчанию

Вопрос все ещё актуален.
keef вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фрагмент БД складского предприятия den2010 Microsoft Office Access 5 10.12.2009 11:12
Фрагмент в Ворде Syltan Microsoft Office Word 14 01.11.2009 18:54
фрагмент задачи t1empo Помощь студентам 1 26.04.2009 17:04
Фрагмент кода С++ Роман Кор Общие вопросы C/C++ 6 22.02.2009 19:25
Word не заменяет выделенный фрагмент Romanbl4 Microsoft Office Word 3 01.08.2008 07:36