Avatar billede dumazz.dk Nybegynder
27. august 2004 - 11:39 Der er 8 kommentarer og
2 løsninger

IniFile.WriteString

Hvorfor virker dette ikke:

IniFile.WriteString( 'Calendar.year', 'Calendar.month', Memo.Lines);
Avatar billede pellelil Nybegynder
27. august 2004 - 11:48 #1
Et hurtigt gæt (uden at vide det) der kan ikke være "." i sektion og/eller variabel navne. Derudover skal du nok i stedet anvende "Memo.Linies.Text" i stedet for blot "Memo.Lines".
Avatar billede dumazz.dk Nybegynder
27. august 2004 - 11:52 #2
Tak....

Hvad med dette:

  IniFile.WriteString( IntToStr(Calendar.Month), IntToStr(Calendar.Day), Memo.Lines.Text);

Den virker, men jeg vil gerne have både år og måned stående i den første...

Altså:

  IniFile.WriteString( IntToStr(Calendar.Year)IntTostr(Calendar.Month), IntToStr(Calendar.Day), Memo.Lines.Text);

Men den virker ikke...
Avatar billede dumazz.dk Nybegynder
27. august 2004 - 12:04 #3
og hvad med denne:

Memo.Lines.Text := IniFile.ReadString( IntToStr(Calendar.Month), IntToStr(Calendar.Day), Memo.Lines.Text );


Hvad angiver det efter det sidste komma ?
Avatar billede pellelil Nybegynder
27. august 2004 - 12:32 #4
I en INI fil gemmes hver "variabel" under en "sektion", og når du skriver "IniFile.WriteString( IntToStr(Calendar.Month), IntToStr(Calendar.Day), Memo.Lines.Text);" så er sektionen din måned og variablen er din dag. Hvis du vil samle dem er det blot et spørgsmål om at samle dem som en streng:

IniFile.WriteString(IntToStr(Calendar.Month)+IntToStr(Calendar.Day), 'MemoTekst', Memo.Lines.Text);

Alternativt brug IntToStr(Trunc(Now)) så får du en given dato (inkl. årstal) som en heltalsværdi, men så kan man selvfølgelige ikke lige "genkende" en dato ved at læse INI filen ind i en editor.

Din læsning bør således hedde:

Memmo.Lines.Text := IniFile.WriteString(IntToStr(Calendar.Month)+IntToStr(Calendar.Day), 'MemoTekst','');

Den sidste parameter er en "default værdi", altså den værdi der bruges hvis den pågældende sektion/variabel ikke kan findes i INI-filen
Avatar billede dumazz.dk Nybegynder
27. august 2004 - 13:24 #5
Memo.Lines.Text := IniFile.WriteString(IntToStr(Calendar.Month)+IntToStr(Calendar.Day), 'MemoTekst','');

[Error] Unit1.pas(145): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
Avatar billede pellelil Nybegynder
27. august 2004 - 13:35 #6
Sorry (type) det skal selvfølgelig være "Memo.Lines.Text := IniFile.ReadString ..."
Avatar billede pellelil Nybegynder
27. august 2004 - 13:38 #7
"Problemet" som jeg tror du kommer til at opleve, er at din Memo's Tekst indeholder #13#10 (Return/Linefeed), og jeg vil tro at du får skrevet/læst "noget snavs" til/fra INI-filen når/hvis din memo indeholde flere linier. Jeg tvivler på at IniFile.ReadString/IniFile.RightString "pakker #13#10 ind" på nogen måde.
Avatar billede dumazz.dk Nybegynder
27. august 2004 - 13:43 #8
Det virker nu...

Hvordan laver jeg linieskift i en:

Memo.Lines.Text := 'Tekst';

der er vel noget ligesom man bruger <br> i html ?
Avatar billede dumazz.dk Nybegynder
27. august 2004 - 13:54 #9
Og når jeg læser fra filen, så læser den kun første linie...
Avatar billede pellelil Nybegynder
27. august 2004 - 19:52 #10
nej du kan bruge #10#13

F.eks:
Memo.Lines.Text := 'Første Linie'+#13#10+'Linie 2';

eller:
Memo.Lines.Add('Første Linie');
Memo.Lines.Add('Linie 2');


Grunden til at den kun låser første linie fra din Inifil er at linieskiftene i din memo gør at der også skiftes linie i din IniFil og så kan den ikke læse teksten. Du er således nødt til at skrive teksten manuelt således din IniFil kommer til at se ud som flg:
[0827]
LineCount = 2
Line1 ='Først Linie'
Line2 = 'Linie 2'

IniFile.WriteInteger('0827', 'LineCount', IntToStr(Memo.Linies.Count+1));
for I := 0 to Memo.Lines.Count-1 do
begin
  IniFile.WriteString '0827', 'Line'+IntToStr(I), Memo.Lines[I]);
end

Læsningen skal foretages på samme måde. Først læs 'LineCount for at finde ud af hvor mange linier der er:
Cnt := IniFile.ReadInteger('0827', 'LineCount', 0);
if Cnt > 0 then begin
  Memo.Lines.Clear;
  for I := 1 to Cnt do begin
    Memo.Lines.Add(IniFile.ReadString('0827', 'Line'+IntToStr(I),'');
  end;
end;
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