"Mortensen" <CBM@indbakke.dk> skrev i en meddelelse
news:3b8ba551$0$7918$edfadb0f@dspool01.news.tele.dk...
> Haves form med buttom (søg), en spinEdit til angivelse af idnr(Numerisk)
og
> en richedit (Med en indlæst ASCII fil med ca 1000000 linier af 24 krakter
> lang) ønsker at kunne finde et bestemt Idnr. ((yyyyy) som er på plads 14 i
> linien og fylder 5 karakter).
>
> Formatet af filen som er indlæst i richedit er som følger:
>
> ACB0077xxxxxxyyyyy
<CR><LF>
>
> Hvor xxxxxx er tal mellem 0-999999
> Hvor yyyyy er tal mellem 0-99999
> Hvor
er tal mellem 0-999
>
> Hvordan angriber jeg dette ?? er det en string og søgning af idnr jeg
skal
> bruge??gode råd modtages med glæde
Det her er ikke en hyper optimeret metode (langtfra) men en hurtig off the
top of my head :)
function TForm1.FindIdnrLinieNr(HelStr: String) : Integer; // Hvis du bruger
Delphi 5+ (jeg er ikke sikker på Delphi < 5)
var
I : Integer;
begin
Result := -1 // for det tilfælde at Idnr ikke eksisterer :)
for I := 0 to RichEdit1.Lines.Count - 1 do
if Copy(RichEdit1.Lines[I], 14, 5) = Helstr then // Delstrengen der
indeholder IdNr
begin
Result := I; // Linienr som IdNr optræder 1. gang (dette virker kun
hvis IdNr er unikt)
Break; // For at undgå en søgning på samtlige 1000000 linier
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Linie: Integer;
begin
Linie := FindIdnrLinieNr(SpinEdit1.Text);
// Jeg bruger ikke selv SpinEdit så det kan være den returnerer Value =
Integer
// Hvis det er tilfældet skal deklarationen i Function FindIdnrLinieNr
naturligvis laves om,
// det samme skal Copy linien i funktionen, så resultatet af Copy bliver
konverteret til integer
if Linie <> -1 then
begin
// Her gør du med RichEdit hvad du gør når du har fundet IdNr.
end;
end;
NB !!!!! Dette er ikke afprøvet kode, det er tastet frit i postprogrammet,
så det kan være behæftet med fejl, men jeg håber det giver dig en ide om
hvad jeg mener.
Hilsen
John