webForumDet fria alternativet

Week/Word

11 svar · 432 visningar · startad av Glitter

GlitterMedlem sedan juli 2003442 inlägg
#1

jag använder dephi 7

Hur får man ut veckan som är nu?
är det inte

WeekOf(date);

isåfall hur konverterar man word till string?
inttostr funkar ju inte det blir inte fel i compilatorn men den klagar när man kör programmet...
'Access violation att address....'

akkeakkerMedlem sedan jan. 200329 inlägg
#2

Jag vet inte vad du gör för fel men testa om detta funkar:

uses DateUtils

...

procedure TForm1.Button1Click(Sender: TObject);
var d: TDateTime;
    w: Integer;
    s: string;
begin
    d := Now();
    w := WeekOf(d);
    s := IntToStr(w);
    ShowMessage('Aktuellt veckonummer: ' + s);
end;
GlitterMedlem sedan juli 2003442 inlägg
#3

ditt exempel funkade perfekt...
hittade felet men vet inte hur jag skall lösa det...
har komponenten från indy clients idFTP och det är den som inte vill använda now() eller date()

procedure TForm1.Button1Click(Sender: TObject);
var
  d: TDateTime;
  i, ar, vecka: integer;
  mapp, filupp, filnamn: string;
begin
  d := now();
  ar := YearOf(d);
  vecka := WeekOf(d);
  mapp := inttostr(ar) + '_' + inttostr(vecka);
  ShowMessage(mapp);

  IdFTP1.Connect();
    IdFTP1.ChangeDir(mapp);
    IdFTP1.Put(fillupp, filnamn);
  IdFTP1.Disconnect;
end;

får fel på
IdFTP1.Disconnect;
felmess: 'Access violation att address....'

akkeakkerMedlem sedan jan. 200329 inlägg
#4

Kan nog inte hjälpa mycket mer då jag inte kan något alls om sockets, ftp osv. Det enda råd jag kan ge är att använda debuggern och sakta stega dig fram i koden och se vart det skiter sig.

GlitterMedlem sedan juli 2003442 inlägg
#5

okey tack ändå...

GlitterMedlem sedan juli 2003442 inlägg
#6

ingen annan som vet hur man skall göra?

det verkar inte som det går att använda någon typ av input för jag testade att skriva
vecka : = 2004;
vecka := 23;
men det verkade inte som det hade någon betydelse...

Jag skall kolla om en mapp finns 2004_23 när jag kör ifen så blir det fel 'Access violation att address....'
fattar inte varför...
kan det vara en bugg i indys ftp client?
isåfall är det någon som vet någon annan bra ftp man kan använda ?

HardrockerMedlem sedan nov. 2003277 inlägg
#7

Om jag har förstått dig rätt så får du ett fel när du försöker byta till en katalog som inte finns.

Om det inte finns någon funktion för att testa om en katalog finns på servern så får du lägga koden i ett try/except statement.

Kan tillägga att jag aldrig har använt mig av Indys ftpklient.

GlitterMedlem sedan juli 2003442 inlägg
#8

altså så här...

fexists := false;
repeat
     if mapp = list[i] then
        begin
             fexists := true;
        end;
     inc(i);
until (i = list.count-1) OR (fexists = true);

det är "if mapp = list then" som det blir fel på...

akkeakkerMedlem sedan jan. 200329 inlägg
#9

Har du initierat i? Om inte så försöker du komma åt ett odefinierat objekt i list. Jag får denna kod att funka som kanske kan likna något som du har?

procedure TForm1.Button1Click(Sender: TObject);
var mapp: string;
    i: Integer;
    list: TStringList;
    fexists: boolean;
begin
    list := TStringList.Create();
    list.AddStrings(memo1.Lines);
    fexists := false;
    mapp := 'repeat';
    i := 0;
    repeat
        if mapp = list[i] then
        begin
            fexists := true;
        end;
        inc(i);
    until (i = list.count - 1) or (fexists = true);
    ShowMessage(IntToStr(i));
end;
GlitterMedlem sedan juli 2003442 inlägg
#10

Tackar hade redan löst det men det var

list := TStringList.Create();

som jag hade glömt...
varför skall man göra så ?
jag menar man har ju redan dimat den som TStrings...
är det någon skilnad på TStrings & TStringList?

akkeakkerMedlem sedan jan. 200329 inlägg
#11

Den raden måste du ha pga att alla objekt måste skapas innan de kan användas. Koden jag gav dig är inte så bra då jag inte frigör objektet, vilket oxå måste göras för alla abjekt som man skapa och som man inte tilldelar någon ägare.

Här är ett bättre förslag där jag frigör objektet list samt använder objektet i ett try-finally block. Nyttan med det är att även om något inträffar i try delen så frigörs alltid objektet list och jag låser inte upp minnet ifall det skulle bli knas. :)

procedure TForm1.Button1Click(Sender: TObject);
var mapp: string;
    i: Integer;
    list: TStringList;
    fexists: boolean;
begin
    list := TStringList.Create();
    try
        list.AddStrings(memo1.Lines);
        fexists := false;
        mapp := 'repeat';
        i := 0;
        repeat
            if mapp = list[i] then
            begin
                fexists := true;
            end;
            inc(i);
        until (i = list.count - 1) or (fexists = true);
    finally
      list.Free;
      list := nil;
    end;
    ShowMessage(IntToStr(i));
end;
GlitterMedlem sedan juli 2003442 inlägg
#12

okey tackar :)

Genererad på 391 ms · cache AV · v20260730165559-full.f96bc7eb