Solved

Counting caracters from cursor position in text to specific string.

Posted on 2008-10-30
8
331 Views
Last Modified: 2010-04-05
Atached code count to positon when specific string in text is  present.
But in text i can have more times same  text is present:

example:one two three four five one six seven one

1. If i positon  cursor on the end of text then my result must be " 0 " and not " 38 "
(number of characters to first time srched string is used).
2.if there is no srched string in text i  need to set a bolean varible "noText" to true.
3. if i have two lines when i put curor on the begining of second line it gives me two characters more than on the end of first line

What to do to resolve point 1,2 and 3?






procedure TForm1.Button1Click(Sender: TObject);

var cp: Integer;

    p: Integer;

begin

  p := Pos(Edit1.Text, Memo1.Lines.Text) + Length(Edit1.Text);

  cp := Memo1.SelStart;

  if cp >= p then

    Edit2.Text := IntToStr((cp - p)+1)

  else

    Edit2.Text := 'what should be here?';

end;

Open in new window

0
Comment
Question by:pr2501
  • 5
  • 3
8 Comments
 
LVL 36

Expert Comment

by:Geert Gruwez
ID: 22840093
hmm it is difficult to understand what you want

to start looking for text from a certain position use PosEx
Same as Pos but with a third parameter Offset

are you looking for a text from a certain position in a memo ?

cp := PosEx(Edit1.Text, Memo1.Text, Memo1.SelStart);

position of Edit1.Text in Memo1.Text and start looking from start of selection in Memo1
0
 

Author Comment

by:pr2501
ID: 22840379
I have to look backwards from cursor position in text with more lines..
0
 
LVL 36

Expert Comment

by:Geert Gruwez
ID: 22840393
backwards ?
from the cursor position to the text ?
and give the beginning or the end of the text ?
0
 
LVL 36

Expert Comment

by:Geert Gruwez
ID: 22840401
and do you want the absolute position or the relative position to the cursor ?
0
How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

 

Author Comment

by:pr2501
ID: 22840480

My text>
one two three four five  six seven one eight
If i srch for "one"> when i put cursor before "two" i must get 1 or if i put cursor before "thre" i must get 5. Then if i put cursor before "eighht" i must get 1. And if i srch for "ten" i must get 0.
 
0
 
LVL 36

Expert Comment

by:Geert Gruwez
ID: 22840781
use the FastStrings unit
this has routine for searching backwards:
http://www.koders.com/delphi/fidFB386C5C240FD5E72013C882ADD7600FDF60E6C7.aspx?s=socket

function FastPosBack(const aSourceString, aFindString : string; const aSourceLen, aFindLen, StartPos : Integer) : Integer;

this should help you out
0
 
LVL 36

Accepted Solution

by:
Geert Gruwez earned 250 total points
ID: 22840813
use it like

cp := FastPosBack(Memo1.Text, Edit1.Text, Length(Memo1.Text), Length(Edit1.Text), Memo1.SelStart);

this will find the start of the text
if it returns non zero :

if cp > 0 then
  Result := Memo1.SelStart - (cp + Length(Edit1.Text));

0
 

Author Comment

by:pr2501
ID: 22855963
Thank you



procedure TForm1.SpeedButton1Click(Sender: TObject);
 

var

 cp:integer ;

begin

cp := form1.FastPosBack(Memo1.Text, Edit1.Text, Length(Memo1.Text), Length(Edit1.Text), Memo1.SelStart);

   if cp > 0 then

   cp := Memo1.SelStart - (cp + Length(Edit1.Text));

   edit2.Text:=inttostr(cp);

end;

Open in new window

0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
In this tutorial I will show you how to use the Windows Speech API in Delphi. I will only cover basic functions such as text to speech and controlling the speed of the speech. SAPI Installation First you need to install the SAPI type library, th…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now