Avatar billede loller Nybegynder
30. maj 2002 - 21:04 Der er 30 kommentarer og
2 løsninger

Finde forskelle?

Jeg har et program der har to strenge:

A som indeholder:

Linie4
Linie3
Linie2
Linie1

og B som indeholder:

Linie5
Linie4
Linie3
Linie2

De linier kunne indeholde hvad som helst, men det der betyder noget er, at der i B loades en "ny" version af A, f.eks. her er der tilføjet en ekstra linie i toppen (og der er forsvundet en i bunden) - lidt ligesom en chat f.eks.

Men jeg vil gerne have en funtion der tilføjer alle ændringer til et memo, f.eks. Så ledes at memo'et indeholder:

Linie5
Linie4
Linie3
Linie2
Linie1
...
...
...

Nogen ideer til hvad jeg kan gøre?
Avatar billede humpfrey Nybegynder
30. maj 2002 - 21:21 #1
Du skal lave en variabel der hedder noget med linie, og du kan jo definere en streng som str" et eller andet"; så skal have variabler for denne memo du vil lave, og så tælle op med en Integer, hver gang at der har været tilføjet en linie, med en if-sætning. Eller du kan kontrollere OM der er tilføjet noget med IF Linie1 <> Linie2 Then write forskel til fil...var det den form for Idee du mente eller ville du have en færdig "function" ? mvh Humpfrey
Avatar billede loller Nybegynder
30. maj 2002 - 21:25 #2
Jeg tror ikke helt jeg er med...
Avatar billede loller Nybegynder
30. maj 2002 - 21:28 #3
Skal lige siges at der godt kan ske at der pludselig bli'r tilføjet TO linier på samme tid...
Avatar billede humpfrey Nybegynder
30. maj 2002 - 22:29 #4
Så kan du ikke lave det som en "Function" men er nød til at lave en "Procedure", hvor den læser en linie af gangen uanset hvor mange der bliver tastet ind.
Avatar billede hermandsen Juniormester
30. maj 2002 - 22:37 #5
Er det ikke bare en chat du vil lave, hvor den øverste linie forsvinder og der bliver tilføjet en ny i bunden? Sådan har jeg da forstået det...

Memo1.Lines.Delete(0); //Fjerner øverste linie

Memo1.Lines.Add('Her skriver vi en masse tekst, som kommer nederst i memo''en');

//hermandsen
Avatar billede loller Nybegynder
30. maj 2002 - 22:43 #6
hermandsen: Tror du har misforstået det...

humpfrey: problemet er at den læser det fra en webside og der kan sagtens blive tilføjet mellem 0 og 10 linier inden den når at reloade...
Avatar billede hermandsen Juniormester
30. maj 2002 - 22:49 #7
Kan du så ikke prøve at forklare det... Jeg forstår ikke ret meget af det du skriver i spørgsmålet... :)
Avatar billede loller Nybegynder
30. maj 2002 - 22:51 #8
Jeg skal bruge en prodecure der chekker om der er forskelle på to strenge, er der, skal det der er nyt i den ene streng tilføjes i et memo
Avatar billede humpfrey Nybegynder
30. maj 2002 - 22:55 #9
Hvad er det den læser ? noget som bliver tastet ind her og nu, ? og hvad er det du vil med det ? gemme det i en logfil ? sortere det ? skrive det tilbage til en webside ? Hvis du skriver en programstump, hvis opgave det er at læse i en fil ( det er jo en fil, selv om det er en webside), så udføres dette med cpu hastighed. Eller har jeg misforstået ?
Avatar billede loller Nybegynder
30. maj 2002 - 23:01 #10
Jeg har en timer der er sat til 5 minutter... Hver gang den aktiveres loades en hjemmeside - en tagwall, hvor formatet er:

UserName - Besked bla bla bla...
UserName - Besked2 blabla

Når der tilføjes nye beskeder bliver de skrevet til toppen...
Derfor skal jeg have et memo der opsamler samtlige beskeder efter hinanden - dvs. chekker for nye beskeder og hvis der e, bli' r de tilføjet i bunden eller toppen af memo'et...
Avatar billede humpfrey Nybegynder
30. maj 2002 - 23:03 #11
Procedure forskel;

Var
Linie  : String;
Linie1  : String;
Linie2  : String;
Forskel : String;

Begin
  If Linie1 <> Linie then
  Forskel := Linie
end;

er det noget a la det der ?
Avatar billede loller Nybegynder
30. maj 2002 - 23:05 #12
Ja, men den skal kunne regne med at der måske er kommet flere nye beskeder, altså mere end en, hvorefter at den ældste skal chekkes først...
Avatar billede humpfrey Nybegynder
30. maj 2002 - 23:07 #13
og bagefter læse forskel og bruge append, til at tilføje linien i en fil
Avatar billede humpfrey Nybegynder
30. maj 2002 - 23:09 #14
så skal du lave en metode med Gettime og nogle if sætninger, der beslutter hvilke den skal læse først
Avatar billede loller Nybegynder
30. maj 2002 - 23:09 #15
lad mig fortælle hvad jeg ahve forestillet mig, så kan du måske hjælpe med lidt source..

Jeg har et memo med de ti nyeste beskeder (standard fra tagwallen - 10 beskeder pr. side)
Hver linie i memo'en repræsentere et indlæg.. Altså 10 indlæg i et memo..
Jeg har et andet memo hvor den skal sammenligne de ti sidste linier med de ti linier fra den nyopdaterede tagwall - chekke om der er kommet nye indlæg, er der det, skal de tilføjes til memo'et...
Avatar billede humpfrey Nybegynder
30. maj 2002 - 23:11 #16
sludder og vrøvl, jeg mener jo selvfølgelig skrive først, den læser jo det hele med det samme
Avatar billede humpfrey Nybegynder
30. maj 2002 - 23:14 #17
er de ti memoer identiske med brugere ( der godt kan være den samme bruger ), hvor du vil checke om vedkommende har skrevet nyt ?
Avatar billede hermandsen Juniormester
30. maj 2002 - 23:15 #18
function ErDerForskel: Boolean;
var
  I, J: Integer;
begin
  Result := False;
  for I := 0 to Memo1.Lines.Count -1 do
    for J := 0 to Memo2.Lines.Count -1 do
    begin
      Result := Memo1.Lines.Strings[I] <> Memo2.Lines.Strings[J];
      if Result then Exit;
    end;
end;

Er det sådan du mener?
Avatar billede loller Nybegynder
30. maj 2002 - 23:16 #19
Problemet i din funktion er, at hvis der bliver tilføjet en linie, bliver der en uoverensstemmelse i alle linier, således at det vil ligne der er 10 nye ændringer...
Avatar billede humpfrey Nybegynder
30. maj 2002 - 23:17 #20
>hermandsen> den er helt ok, hvis du spørger mig
Avatar billede loller Nybegynder
30. maj 2002 - 23:19 #21
Den skal jo også tilføje de nye linier i memo2
Avatar billede loller Nybegynder
30. maj 2002 - 23:20 #22
Hvis vi ser på den som et logprogram, som logger alle beskeder til en log... Den chekker hvert 5. min for nye beskeder på siden og skriver de nye beskeder i et memo
Avatar billede hermandsen Juniormester
30. maj 2002 - 23:22 #23
Så du vil altså finde ud af hvor mange nye indlæg der er kommet...

function AntalNyeIndlaeg: Integer;
var
  I: Integer;
begin
  Result := -1;
  for I := 0 to Memo1.Lines.Count -1 do
    if Memo1.Lines.Strings[I] = Memo2.Lines.Strings[0] then
    begin
      Result := I;
      Break;
    end;
end;

Her er Memo1 din nye og Memo2 din gamle...
Avatar billede humpfrey Nybegynder
30. maj 2002 - 23:22 #24
måske kunne du lave en case, og så sige with case od...så kan man godt køre de løkker som hermandsen skriver
Avatar billede hermandsen Juniormester
30. maj 2002 - 23:25 #25
Så er det bare at bruge:

procedure TForm1.ButtonClick(Sender: TObject);
var
  I: Integer;
begin
  for I := AntalNyeIndlaeg -1 downto 0 do
    Memo2.Lines.Insert(0, Memo1.Lines.Strings[I]);
end;
Avatar billede loller Nybegynder
30. maj 2002 - 23:31 #26
Takker...!! :o)
Avatar billede hermandsen Juniormester
30. maj 2002 - 23:31 #27
Virker det?
Avatar billede loller Nybegynder
30. maj 2002 - 23:34 #28
Ja..! :o)
Avatar billede hermandsen Juniormester
30. maj 2002 - 23:35 #29
Kanon!!! ;)
Avatar billede loller Nybegynder
30. maj 2002 - 23:43 #30
Har lige et tillægsspørgsmål:

TmpStr := Memo1.Text;
  while pos('<',TmpStr) >= 0 do
  begin
    delete(TmpStr,pos('<',TmpStr)-1,pos('>',TmpStr)-pos('<',TmpStr)+1);
  end;
  Memo1.Text := TmpStr;

Det er min funktion til at slette al' html - men den ser ikke ud til at virke.. Den laver en uendelig løkke??
Avatar billede loller Nybegynder
30. maj 2002 - 23:48 #31
Nu virker det - tak
Avatar billede hermandsen Juniormester
30. maj 2002 - 23:49 #32
Fjern >=, så der i stedet står <> i din while dekleration...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester