Avatar billede Slettet bruger
04. oktober 2002 - 17:23 Der er 14 kommentarer og
2 løsninger

Lidt med strings

Hej, jeg er ved at lave en IRC bot.
Jeg vil gerne have en lille smule hjælp til dette.

Når en bruger joiner en kanal skal brugerens hostmask sammenlignes med en linie i en fil.
for eksempel hvis en bruger joiner en kanal og hans hostmask er ~test1@adsl.dk og linierne i en tekstfil er

~enandenbruger@isdn.dk
~test1@adsl.dk
~jegerforvild@tdc.dk

skal programmet finde linien som matcher fuldstændig med hostmasken og gøre et eller andet.

Jeg har også et andet spørgsmål:
Hvis man i en fil har en masse kanaler listet i en tekstfil, som klienten skal joine når den connecter på netværket, hvis nu tekstfilen ser sådan ud:

#kanal1
#kanal2
#hererviseje

skal den fx gøre irckomponent.join(InsertChannelNameHere); ved hver af linierne.

Jeg har også et problem med en TMemo som kommer med erroren "index out of bounds" når man adder linier til den.

Og noget mere..
Hvis jeg har denne tekst:

tekst1 tekst2 tekst3

Hvordan kan jeg så se hvad tekst1 og tekst2 osv. er?

Jeg lægger 100 point op, og jeg giver gerne mere -
Avatar billede dkn Nybegynder
04. oktober 2002 - 17:34 #1
var
st:tstringlist;
i:integer;
begin
st := tstringlist.create;
st.loadfromfile('brugernavne.txt');
for i := 0 to st.count-1 do
if st.strings[I] = '~test1@adsl.dk' then
begin
showmessage('fandt ~test1@adsl.dk');
end;

2)
var
st:tstringlist;
i:integer;
begin
st := tstringlist.create;
st.loadfromfile('serverlist.txt');
for i := 0 to st.count-1 do
irckomponent.join(st.strings[I]);
Avatar billede dkn Nybegynder
04. oktober 2002 - 17:35 #2
3) du mener spliter teksten op ved hver mellemrum?
Avatar billede Slettet bruger
04. oktober 2002 - 18:52 #3
dkn> Ja.
Avatar billede dkn Nybegynder
04. oktober 2002 - 20:50 #4
3)
Her er en måde at gøre det på. Man kunne også have valgt at bruge Tstrings.delimiter.

Men det virker.

var
st:tstringlist;
i:integer;
begin
st := tstringlist.create;
st.loadfromfile('splitlist.txt');
st.Text := stringreplace(st.Text, ' ', #13#10, [RfReplaceAll]);
showmessage(st.Text);
end;
Avatar billede borrisholt Novice
05. oktober 2002 - 10:56 #5
dkn >> Nu skal vi ikke gøre verden mere besværlig en den er :-)

var
  StringList : TStringList;
  i : Integer;
begin
  StringList := TStringList.Create;
  with TStringList.Create do
  try
    LoafFromFile('BrugerNavne.txt')
    i := IndexOf('~test1@adsl.dk');
  finally
    Free;
  end;

  if i >= 0 then
    ShowMessage(Format('Fandt ~test1@adsl.dk på potion %d',[i]) )
  else
    ShowMessage('Desværre Botgård !!!');

Jens B
Avatar billede borrisholt Novice
05. oktober 2002 - 10:56 #6
og DKN>> Så skal vi vist have en snak du ved sådan mand til mand omkring indrykninger og store og små bogstaver :-)

Jens B
Avatar billede dkn Nybegynder
05. oktober 2002 - 12:14 #7
Jens -> hehehe, syntes bare ikke lige jeg gad til at lege med indryk når man sidder og skriver i et "textarea".

Men ok du går da også til den med dit eksempel :)
Har ihvertefal lært en ny procedure
//LoafFromFile('BrugerNavne.txt') :)

Men du har ret mit var ikke for genialt, jeg er sku nok lidt for glad for de loops.

Ses Jens :)
Avatar billede borrisholt Novice
05. oktober 2002 - 12:18 #8
ja ja jeg har dummet mig jeg ved det .... Vi prøver sq lige igen :

var
  i : Integer;
begin
  with TStringList.Create do
  try
    LoadFromFile('BrugerNavne.txt')
    i := IndexOf('~test1@adsl.dk');
  finally
    Free;
  end;

  if i >= 0 then
    ShowMessage(Format('Fandt ~test1@adsl.dk på potion %d',[i]) )
  else
    ShowMessage('Desværre Botgård !!!');

Jens B :-)
Avatar billede borrisholt Novice
05. oktober 2002 - 12:19 #9
DKN >>> jeg har før deltaget i leje som "Compileren bærer ikke nag .." Og som en følge der af gjalt det om at løse en bestemt opgave med færest mulige tegn !

VC++ er iøvrigt god til opgaven !

Jens B
Avatar billede dkn Nybegynder
05. oktober 2002 - 12:28 #10
Jeg leger skam ikke med compileren når jeg laver noget seriøst koder jeg skam miljøbevidst. Men jeg må da indrømme at jeg bare fik skrevet noget ekstra kode i forhold til opgaven som det skulle løse.
Jeg syntes da også jeg har fået undskyldt mig...

Angående opstilling af kode bruger jeg selv en source formatter for at spare tid på at lave indryk. Der er nu ikke noget så dejligt som en overskuelig kode i pascal :)
Avatar billede Slettet bruger
06. oktober 2002 - 19:28 #11
Borrisholt> hvad betyder potion %d? Er det linienummeret, eller..?
Avatar billede dkn Nybegynder
06. oktober 2002 - 20:45 #12
prøv at markere "Format" og tryk F1
Avatar billede Slettet bruger
06. oktober 2002 - 21:08 #13
By default, the debugger displays the result of a watch in the format that matches the data type of the expression. For example, by default, integer values are displayed in decimal form. If you select Hexadecimal in the Watch Properties dialog box for an integer type expression, the debugger changes the display format from decimal to hexadecimal.

If you are setting up a watch on an element in a data structure (such as an array), you can display the values of consecutive data elements. For example, suppose you have an array of five integers named xarray. Type the number 5 in Repeat Count on the Watch Properties dialog box to see all five values of the array. To use a repeat count, however, the watch expression must represent a single data element.

To format a floating-point expression, select Decimal at Display format and enter a number for Digits on the Watch Properties dialog to indicate the number of significant digits you want displayed in the Watch List.

The following table describes the watch expression format options and their effects.

Option    Types affected    Description

Hexadecimal    integers/characters    Shows integer values in hexadecimal with the 0x prefix, including those in data structures.
Character    characters/strings    Shows special display characters for ASCII 0 to 31. By default, such characters are shown using the appropriate C escape sequences (\n, \t, and so forth).
Decimal    integers    Shows integer values in decimal form, including those in data structures.
Floating point    floating point    Shows the significant digits specified; from 2-18. The default is 7.

Memory dump    all    Shows the size in bytes starting at the address of the indicated expression. By default, each byte displays two hex digits. Use the memory dump with the character, decimal, hexadecimal, and string options to change the byte formatting. Use the Repeat Count setting to specify the number of bytes you want to display.
Pointer    pointers    Shows the address of the pointer.
Structure/Union    structures /unions    Shows field names and unions as well as values such as X:1;Y:10;Z:5.

String    char, strings    Shows ASCII 0 to 31 as C escape sequences. Use this option only to modify memory dumps.
Default    all    Shows the result in the display format that matches the data type of the expression.
Avatar billede Slettet bruger
06. oktober 2002 - 21:08 #14
Jeg fatter ikke særlig meget af det, desværre
Avatar billede dkn Nybegynder
06. oktober 2002 - 22:08 #15
Ok du har ikke valgt den der hedder "Format function"

men jeg har det til dig her:

function Format(const Format: string; const Args: array of const): string;

Description

This function formats the series of arguments in the open array Args. Formatting is controlled by the format string Format; the results are returned in the function result as a string.

For information on the format strings, see Format Strings.

//*****

d    Decimal. The argument must be an integer value. The value is converted to a string of decimal digits. If the format string contains a precision specifier, it indicates that the resulting string must contain at least the specified number of digits; if the value has less digits, the resulting string is left-padded with zeros.
Avatar billede mora Nybegynder
07. oktober 2002 - 13:06 #16
skal den fx gøre irckomponent.join(InsertChannelNameHere); ved hver af linierne.
Prøv med irckomponent.join(#chan1,#chan2,#chan3);
IRC protokollen tillader ihvertfald at man kan joine flere kanaler på en gang med den kommando (JOIN #chan....), du skal dog sende hver kanal alene hvis der skal bruges en key (JOIN #chan key).
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