Ĺadny brzuch
Mam plik który nazywa się "mapa.map". W tym pliku zapisane są inforamcje o mapie w sposób następujący:
126|001|002|158|123|102...
W jaki sposób wczytać te dane do programu i rozpisać do zmiennych(oczywiście w kolejności w jakiej są zapisane w pliku "mapa.map"):
pole1:integer;
pole2:integer;
pole3:integer;
...
Proszę o pomoc
var Int : array[1..MAXPATH] of Integer; Licznik : Integer = 1; ... STR := //Str z pliku while 1=1 do begin try Int[Licznik] := Copy(STR,1,Pos('|',STR)); STR := Copy(Pos('|',STR) + 1,Length(STR)); Inc(Licznik); except Break end; end;
Najszybciej, ale może nie najlepiej :D
//Drobny błąd
Użytkownik mariuszlorenc edytował ten post 24 sierpień 2005, 16:00
Jest wiele sposobów, można też tak ;)
zmienne:
s: string;
lastfound, i, x: integer;
pole: array[0..99] of integer;
(s to wczytana linia pliku)
łatwiej będzie wczytywać do tablicy:
   lastfound:=1;    X:=0;     for I:=1 to length(s) do     begin      if (copy(s,I,1)='|') then      begin       pole[X]:=strtoint(copy(s,lastfound,I-lastfound)));       X:=X+1;       lastfound:=I+1;      end;     end;
Nie kompilowałem, ale powinno być ok ;)
Jeśli nie, to gdzieś się mogłem pomylić o 1.
Użytkownik pwl edytował ten post 24 sierpień 2005, 16:12
Możesz to zrobić też tak ;):
procedure CzytajMape(nazwapliku:string); var plik:textfile; str,linia:string; intfromfile:array[0..1000] of integer; X,i:integer; begin AssignFile(plik,nazwapliku); Reset(plik); while not eof(plik) do begin ReadLn(plik,linia); str:=str+linia; end; CloseFile(plik); x:=pos('|',str); i:=0; while X>0 do begin intfromfile[i]:=StrToInt(copy(str,1,x-1)); delete(str,1,X); Inc(i); x:=pos('|',str); end; //dalsze instrukcje end;
Zmienne są zapisane w tablicy intfromfile.
Użytkownik Mek edytował ten post 24 sierpień 2005, 16:21
i++;
procedure TForm1.Button1Click(Sender: TObject); var t:tstringlist; ints:array of integer; i:integer; begin t:=tstringlist.Create; t.LoadFromFile('c:\plik.txt'); ExtractStrings(['|'],[' '],PChar(t.Text),t); t.Delete(0); setlength(ints,t.Count); for i:=0 to t.Count-1 do val(t[i],ints[i],ints[i]);
No tak, mój błąd, w Delphi nie można użyć znaków ++ przy zmiennej do zwiększenia jej wartości :P. I właśnie miałem napisać, że zamiast
i++;
niech będzie
Inc(i);
ale Twoja edycja była szybsza ;).
BTW już poprawiłem błąd w poprzednim swoim poście :P Przyzwyczaiłem się do znaku ++ przez PHP i C++ :P.
Użytkownik Mek edytował ten post 24 sierpień 2005, 16:28
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
126|001|002|158|123|102...
W jaki sposób wczytać te dane do programu i rozpisać do zmiennych(oczywiście w kolejności w jakiej są zapisane w pliku "mapa.map"):
pole1:integer;
pole2:integer;
pole3:integer;
...
Proszę o pomoc
var Int : array[1..MAXPATH] of Integer; Licznik : Integer = 1; ... STR := //Str z pliku while 1=1 do begin try Int[Licznik] := Copy(STR,1,Pos('|',STR)); STR := Copy(Pos('|',STR) + 1,Length(STR)); Inc(Licznik); except Break end; end;
Najszybciej, ale może nie najlepiej :D
//Drobny błąd
Użytkownik mariuszlorenc edytował ten post 24 sierpień 2005, 16:00
Jest wiele sposobów, można też tak ;)
zmienne:
s: string;
lastfound, i, x: integer;
pole: array[0..99] of integer;
(s to wczytana linia pliku)
łatwiej będzie wczytywać do tablicy:
   lastfound:=1;    X:=0;     for I:=1 to length(s) do     begin      if (copy(s,I,1)='|') then      begin       pole[X]:=strtoint(copy(s,lastfound,I-lastfound)));       X:=X+1;       lastfound:=I+1;      end;     end;
Nie kompilowałem, ale powinno być ok ;)
Jeśli nie, to gdzieś się mogłem pomylić o 1.
Użytkownik pwl edytował ten post 24 sierpień 2005, 16:12
Możesz to zrobić też tak ;):
procedure CzytajMape(nazwapliku:string); var plik:textfile; str,linia:string; intfromfile:array[0..1000] of integer; X,i:integer; begin AssignFile(plik,nazwapliku); Reset(plik); while not eof(plik) do begin ReadLn(plik,linia); str:=str+linia; end; CloseFile(plik); x:=pos('|',str); i:=0; while X>0 do begin intfromfile[i]:=StrToInt(copy(str,1,x-1)); delete(str,1,X); Inc(i); x:=pos('|',str); end; //dalsze instrukcje end;
Zmienne są zapisane w tablicy intfromfile.
Użytkownik Mek edytował ten post 24 sierpień 2005, 16:21
i++;

procedure TForm1.Button1Click(Sender: TObject); var t:tstringlist; ints:array of integer; i:integer; begin t:=tstringlist.Create; t.LoadFromFile('c:\plik.txt'); ExtractStrings(['|'],[' '],PChar(t.Text),t); t.Delete(0); setlength(ints,t.Count); for i:=0 to t.Count-1 do val(t[i],ints[i],ints[i]);
No tak, mój błąd, w Delphi nie można użyć znaków ++ przy zmiennej do zwiększenia jej wartości :P. I właśnie miałem napisać, że zamiast
i++;
niech będzie
Inc(i);
ale Twoja edycja była szybsza ;).
BTW już poprawiłem błąd w poprzednim swoim poście :P Przyzwyczaiłem się do znaku ++ przez PHP i C++ :P.
Użytkownik Mek edytował ten post 24 sierpień 2005, 16:28