Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Поиск в текстовых файлах


Автор: Palladin 23.6.2006, 14:45
Дан тесктовый файл в который во время работы программы пользователь вводит различные записи, а одно из них времяsmile
Я ввожу в едит какоето время оно вводится в таком виде 14:42 (допустим), как потом в файле осуществить поиск чтобы все строки в котором время меньше чем это удалились?????? Как удалить знаюsmile только поиск подскажите smile

Допустим время вводится последним в строку файла, вопрос в том как сравнить время??? smile  
 

Автор: Romikgy 23.6.2006, 14:52
находишь места где время написано, потом
StrToTime
и сравниваешь время smile 

Автор: Palladin 23.6.2006, 17:55
что типа нашёл время потом присовил его какомунить X и просто сравнил, допустим так:

X:=strtotime(найденное в файле время)
if x<y then 
и т.д. ???????????????????????????? 

Автор: Romikgy 23.6.2006, 19:53
А что смущает? 

Автор: Poseidon 23.6.2006, 20:45
Цитата(RooR @  23.6.2006,  14:45 Найти цитируемый пост)
только поиск подскажите 
 Поиск по тексту лучше всего осуществлять в помощью функции pos, земляк smile
 

Автор: Palladin 24.6.2006, 00:02
Пасейдон помоги земляку своему и воздасться тебе smile  не умею я ей пользоватся я когда то писал что преподаватели мягко сказать идиоты, они ничего незнают в delphi мы учимся по методичкам какого-то минского университетаsmile(( спросить кроме этого форума негде т.к. в группе шарящих людей всего 4 человека со мной, другие получают зачёты просиживанием ж*пы рядом с преподами и поставкой им после этого зачётаsmile((  Вообщем не обучили, а в книге по которой я учу делфу этого нетsmile(( хороший смайликsmile smile  smile  

Автор: Aleksiem 24.6.2006, 03:05
Пример a-искомоя подстрока, b-строка в которой ищем получаем
i := Pos(a, b); //i - позиция вхождения подстроки a в строку b.
Благодарностей не надо :-) 

Автор: Palladin 24.6.2006, 10:32
т.е. допустим мне надо что-то найти:
Код

var
s,a:string;
begin
s:='1111 000000 111 00000 111';
a:=edit1.text; //в едите допустим ввели 111
p:=pos(a,s);
edit2.text:=p; //т.е. если я правильно понял в едит2 выведится 111111


это так, неужели так простоsmile

P.S. и где ты был раньшеsmile))))))))) 

Думал тебе плюс кинуть да ты же сказал благодарностей ненадо smile  smile  smile  

Автор: Romikgy 24.6.2006, 15:49
RooR, имхо так как ты написал работать не будет
переменная р это число, а ты его в эдит напрямую кидаешь
вызови справку по 
Цитата(RooR @  24.6.2006,  09:32 Найти цитируемый пост)
pos

 

Автор: Sunr1se 24.6.2006, 16:12
Цитата(RooR @  24.6.2006,  10:32 Найти цитируемый пост)
т.е. если я правильно понял в едит2 выведится 111111

Нет, в Edit'е выведется просто 1, то есть позиция, с которой начинается комбинация 111. Чтобы было понятнее, вот пример. В нем я ищу '0000'.
Код

var
  s, a:string;
  p: integer;
begin
  s := '1111 000000 111 00000 111';
  a := Edit1.Text; //в Edit't ввели '0000'
  p := pos(a, s); //ищем '0000'... ага, нашли: такая комбинация цифр начинается с шестой позиции. это число и вернем.
  Edit2.Text := IntToStrp; //как результат - во втором Edit'е написано '6'
 

Автор: Aleksiem 24.6.2006, 16:37
Цитата(Sunr1se @ 24.6.2006,  16:12)
Цитата(RooR @  24.6.2006,  10:32 Найти цитируемый пост)
т.е. если я правильно понял в едит2 выведится 111111

Нет, в Edit'е выведется просто 1, то есть позиция, с которой начинается комбинация 111. Чтобы было понятнее, вот пример. В нем я ищу '0000'.
Код

var
  s, a:string;
  p: integer;
begin
  s := '1111 000000 111 00000 111';
  a := Edit1.Text; //в Edit't ввели '0000'
  p := pos(a, s); //ищем '0000'... ага, нашли: такая комбинация цифр начинается с шестой позиции. это число и вернем.
  Edit2.Text := IntToStrp; //как результат - во втором Edit'е написано '6'

Маленькая описка.
Не InttoStrp а InttoStr(p)
2 ROOR 
Просто эт материал второго урока по программированию на паскале с нуля  smile  smile  

Автор: Palladin 24.6.2006, 16:43
По поводу уроков читай мой пост вышеsmile)))) вообщем понятно функция pos найдёт лиш номер с которого начинается комбинация, будем чёнить пробовать smile  

Автор: Sunr1se 24.6.2006, 17:00
Я так понял, тебе надо следующее:
есть две строки. в первой, скажем, 14:20, во второй - 15:55. Надо их сравнить. Так?
Если так, то вот функция, которая сравнивает smile
Код

function CompareTime(Time1, Time2: string): integer;
var
  Hour1, Hour2, Minute1, Minute2: string;
begin
  Hour1 := Time1[1] + Time1[2];
  Hour2 := Time2[1] + Time2[2];
  Minute1 := Time1[4] + Time1[5];
  Minute2 := Time2[4] + Time2[5];
  if (Hour1 > Hour2) or ((Hour1 = Hour2) and (Minute1 > Minute2)) then
    Result := 1
  else
    Result := 2;
end;

Если больше Time1, то функция возвращает 1. Если больше Time2, то она возвращает 2.
Писал навскидку, поэтому реализовано далеко не самым лучшим способом. 

Автор: Palladin 24.6.2006, 19:06
Спасибо smile  

Автор: Sunr1se 24.6.2006, 19:28
RooR, еще один вариант:
Код

function CompareTime(Time1, Time2: string): integer;
var
  Time1Real, Time2Real: real;
begin
  Delete(Time1, 3, 1);
  Delete(Time2, 3, 1);
  Insert(',', Time1, 3);
  Insert(',', Time2, 3);
  Time1Real := StrToFloat(Time1);
  Time2Real := StrToFloat(Time2);
  if Time1Real > Time2Real then
    Result := 1
  else
    Result := 2;
end;
 

Автор: Palladin 24.6.2006, 21:18
Гы, очень даже, я вот думаю может просто ввод сделать времени таким ??,??  smile  smile  smile  smile 

 

Автор: Sunr1se 25.6.2006, 10:03
Цитата(RooR @  24.6.2006,  21:18 Найти цитируемый пост)
я вот думаю может просто ввод сделать времени таким ?

То есть каким? smile 

Автор: Sunr1se 25.6.2006, 15:36
Еще один вариант, получше предыдущих. Может быть еще актуально smile
Код

function CompareTime(Time1, Time2: string): integer;
var
  Time1Real, Time2Real: real;
begin
  Time1 := StringReplace(Time1, ':', ',', []);
  Time2 := StringReplace(Time2, ':', ',', []);
  Time1Real := StrToFloat(Time1);
  Time2Real := StrToFloat(Time2);
  if Time1Real > Time2Real then
    Result := 1
  else
    Result := 2;
end;

По сравнению с предыдущим у него один недостаток и одно преимущество. Недостаток в том, что если время запишут как 14.10, а не как 14:10, то код не сработает как надо. А преимущество в том, что появляется возможность обрабатывать записи вида 9:55. 

Автор: Palladin 25.6.2006, 19:49
ГЫ, ещё раз спасибо я и незнаю какой в прогу впихнуть smile  smile  smile  smile  smile  

Автор: Sunr1se 25.6.2006, 20:43
Пихай второй!!! Рекомендую! smile
Не, серьезно, он лучше. На мой взгляд. 

Автор: Yanis 25.6.2006, 23:59
Цитата(Sunr1se @  25.6.2006,  16:36 Найти цитируемый пост)
Еще один вариант, получше предыдущих. Может быть еще актуально

Код
DateUtils.CompareTime(StrToTime(Time1), StrToTime(Time2))
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)