![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() в программе нужно показать значения, которые находятся между первым и вторым двоеточием.
у меня есть два типа решения. в первом он удаляет последний нужный знак, а во втором какая то странная зависимость неправильная 1тип решения Код:
procedure TForm1.Button1Click(Sender: TObject); var s,d:string; i,n,p:integer; begin s:=edit1.Text; n:=0; for i:=1 to length (s)do begin if s[i]=':' then n:=n+1; end; if n<=1 then edit2.Text:='Введите значения' else begin repeat p:=0; n:=0; for i:=1 to length (s)do begin if s[i]=':' then n:=n+1; p:=i; End; delete(s,p,99); until n=1; for i:=1 to p do if s[i]=':' then d:=copy(s,i+1,p); edit2.Text:=(d); end; end; procedure TForm1.Button2Click(Sender: TObject); begin form1.Close end; end. 2 тип решения Код:
procedure TForm1.Button1Click(Sender: TObject); var s,d:string; i,n,p,h:integer; g:array[1..20]of integer; begin s:=edit1.Text; n:=0; h:=1; for i:=1 to length (s)do begin if s[i]=':' then n:=n+1; end; if n<=1 then edit2.Text:='Введите значения' else begin for i:=1 to length (s)do if s[i]=':' then for p:=h to h+1 do begin g[p]:=i; h:=h+1; end; d:=copy(s,g[1]+1,g[2]-g[1]); edit2.Text:=d; end; end; end. |
#2
|
|||
|
|||
![]() Все гораздо проще.
Код:
function ExtractVals(AStr : String) : String; begin AStr := Copy(AStr, Pos(':',AStr)+1,Length(AStr) - Pos(':',AStr)); Result := Copy(AStr,1,Pos(':',AStr)-1); end; Алгоритм: 1. Отрезаем все с начала до первого двоеточия, включая само двоеточие, и выкидываем (т.е. берем хвост). 2. Вырезаем в результат с первого символа до двоеточия (второго, первое уже выкинули), не включая само двоеточие. Это если я правильно понял задачу. Твой код не смотрел, т.к. больно ты там накрутил, а задача то элементарная. |
#3
|
|||
|
|||
![]() lmikle
спасибо огромное. переделал немного под себя Код:
var f : String; begin edit2.Text:=''; f:=edit1.Text; f:=Copy(f,Pos(':',f)+1,Length(f)); edit2.Text:=Copy(f,1,Pos(':',f)-1); end; end. Не мог бы ты посоветовать какую нибудь книгу для таких как я? нам препод мало объясняет и никакой доп литературы не говорит. заранее спасибо!!! Страдалецъ Мы не проходили WrapText но все равно спасибо Последний раз редактировалось SmaZz, 27.03.2009 в 23:52. |
#4
|
|||
|
|||
![]() У меня сейчас такая же проблемка...
Вообщем, дан String, записанный по шаблону xQy, где x, y - любое число, а Q - один из знаков действия (+, -, *, /). Нужно выудить эти числа из String и знак действия. Ну посчитать я сам смогу ![]() Помогите решить, сейчас сидел, ничего не получилось. Auta i Lome... |
#5
|
||||
|
||||
![]() Смотрите вариант lmikle
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
|||
|
|||
![]() Ну вот я пробовал по варианту lmikle ничего не получилось
![]() ![]() Auta i Lome... |
#7
|
|||
|
|||
![]() Цитата:
Код:
procedure ExtractNumbersAndSign(Expression: string); type TSigns = set of Char; var x, y, Q: string; i, ExpLen: Integer; Signs: TSigns; begin Signs := ['+', '-', '*', '/']; i := 1; ExpLen := Length(Expression); while (not (Expression[i] in Signs) and (i < ExpLen)) do Inc(i); Q := Expression[i]; x := Copy(Expression, 1, i - 1); y := Copy(Expression, i + 1, ExpLen - i); ShowMessage('Q = ' + Q + #13#10'x = ' + x + #13#10'y = ' + y); end; В общем, древний-древний Pascal... Почти. =) P.S. Ой, только сейчас увидела небольшой промах. Теперь исправлено. Раньше было так (не совсем корректно): Код:
while (not (Expression[i] in Signs) or (i = ExpLen)) do Inc(i); Последний раз редактировалось Nyctos Kasignete, 31.03.2009 в 13:10. |
#8
|
|||
|
|||
![]() Спасибо! Просто гениально!
Auta i Lome... |
#9
|
||||
|
||||
![]() Можно сделать это несколько иначе,если воспользоваться функцией WrapText:
Код:
procedure TForm5.Edit1Change(Sender: TObject); Var S: TStringList; begin S := TStringList.Create; S.Text := WrapText(Edit1.Text,#13#10,[':'],1); S.Text := StringReplace(S.Text,':','',[rfReplaceAll]); Edit2.Text := ''; if S.Count > 1 then Edit2.Text := S.Strings[1]; S.Free; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |