ďťż

Ł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
  •