Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

народ хельп как читать из файла..

тут можно задать вопрос по скриптингу
Post Reply
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

народ хельп как читать из файла..

Post by ParadoX »

собственно как это сделать..... :roll: дельфийские темы не помогают.. да и не узнает стелса типа переменной ТЕКСТ... в примерах дельфи вроде инт оф текс.. кароч шота такое немеренное.. кароче хелп ) как прочитать построчно.. да и еще.. я вот подумываю в инже круто можна было мутить через exec(waittargettile 1234 1234 1234 1234) к примеру... а как тута... нада придумать типа чтоб изменяло строки.. или сделать 4- мерный массив... кароч что от вас господа требуется.. дайте команды читки.. посимвольнои и построчно..
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Так что тебе надо :?:
Будь добр пиши топики грамотнее :!:

Вот тебе пример как загрузить данные с файла в массив:

Code: Select all

program LoadTilesDemo;
var Tiles : array [1..50] of array [1..4] of Integer;

function LoadTilesFromFile (FileName : String) : Boolean;
var MyStringList : TStringList;
    i,n : integer;
    S : String;
begin
Result := true;
MyStringList := TStringList.Create;
MyStringList.LoadFromFile(FileName);
if MyStringList.Count > 0 then for i := 0 to MyStringList.Count - 1 do
begin
S := MyStringList.Strings[i];
if S = '' then Result := false;
with TStringList.Create do
   try
     Delimiter := ' ';
     DelimitedText := S;
     if Count = 4 then
     begin
       for n := 0 to 3 do Tiles[i][n] := StrToInt(Strings[n]);
     end;
   finally
     Free
   end;
end; {end for}
MyStringList.Free;
end; {end function LoadTilesFromFile}

Begin

if LoadTilesFromFile('myfile.txt') then
begin
{Do Something}
end
else AddToSystemJournal('Error Loading Tiles from file');


End.
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

В данном случае координаты каждого нового тайла начинаются с новой строки. При этом между Tile, X, Y и Z должен быть один пробел :!:


Забыл сказать:
Для того чтобы работали методы:
TStringList.Delimiter и TStringList.DelimitedText
Необходимо иметь Stealth v0.51 :!:
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

Miralex wrote: Для того чтобы работали методы:
TStringList.Delimiter и TStringList.DelimitedText
Необходимо иметь Stealth v0.51 :!:
обьясни что это... я ваще не нашол подробного описания класса в котором эти методы... написано проста типа это для строк и тп и тд... но из чего состоит нету...
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

Эх не везет мне в... вот что пишет..

10:58:59 PM: Compiling
10:58:59 PM: Compiled succesfully
10:58:59 PM: Access violation at address 40032E5E in module 'rtl90.bpl'. Read of address 00000025 at 1.466
10:58:59 PM: Script(3336) stoped successfuly
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

Read of address 00000025 at 1.466
TstringList использовал? Про метод Create не забыл :?: :!:
Скрипт покажи.
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

Miralex wrote:
Read of address 00000025 at 1.466
TstringList использовал? Про метод Create не забыл :?: :!:
Скрипт покажи.

читай предыдущий пост.. я просил раскажи про класс этот... как его там..TStringList !!! а лучше ПРОСТО СКИНЬ КУСОК КОДА ГДЕ КЛАСС ОПИСАН ЭТОТ !!!!! тада я сам пойму что к чему...

ЗЫ:в нете толком не описан этот класс.. тока ляля тополя.. а методов нет..
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

вобщем я понял для чего класс такой извращенный.. можно ли просто загрузить из файла инфо в массив некий.. потом из этого массива разбить на части уже... в васике это сделалось бы за 5 строк.. в сишке ну чуть больше... даи вот на нормальном паскале написан код..


procedure slovafull; {заполняем слова из файла}
var Fslov:text;
i,j:byte;
begin
assign(fslov,'slova.slo'); reset(fslov);
I:=0 ;
while not eof(fslov) do
begin
inc(i);
readln(fslov,slovo);
end;
n:=i;
close(fslov);
end;
Miralex
Developer
Developer
Posts: 656
Joined: 11.03.2005 19:12
Contact:

Post by Miralex »

ф-ции Assign, Reset и прочие, для работы с файлами напрямую - Pascal Script не поддерживает :-(
Позже сделаю вручную их.

Delimiter и DelimitedText к сожалению некорректно работают ... позже исправлю.

Но это все равно не значит что нет способов работать с файлами :-)

Вот тебе готовый пример скрипта:

Code: Select all

program LoadTilesDemo; 
var Tiles : array [1..50] of array [1..4] of Integer;
    i : Integer; 

function LoadTilesFromFile (FileName : String) : Boolean; 
var MyStringList : TStringList; 
    i : integer; 
    S : String;
    Tile,X,Y,Z : Integer; 
begin 
Result := true;
try 
MyStringList := TStringList.Create; 
MyStringList.LoadFromFile(FileName); 
if MyStringList.Count = 0 then Result := false
else for i := 0 to MyStringList.Count - 1 do 
begin 
S := MyStringList.Strings[i]; 
Tile := StrToInt(Copy(S,1,4));
X := StrToInt(Copy(S,6,4));
Y := StrToInt(Copy(S,11,4));
Z := StrToInt(Copy(S,16,4));
Tiles[i+1][1] := Tile;
Tiles[i+1][2] := X;
Tiles[i+1][3] := Y;
Tiles[i+1][4] := Z;
end; {end for} 
finally 
MyStringList.Free; 
end; 
end; {end function LoadTilesFromFile} 

Begin 

if LoadTilesFromFile('myfile.txt') then 
begin 
{Do Something}
for i := 1 to 10 do
   begin
   AddToSystemJournal(IntToStr(Tiles[i][1])+' '+IntToStr(Tiles[i][2])+' '+IntToStr(Tiles[i][3])+' '+IntToStr(Tiles[i][4]));
   end; 
end 
else AddToSystemJournal('Error Loading Tiles from file'); 


End.
Содержимое файла myfile.txt:

Code: Select all

1234 1244 1242 1212
1231 1231 2342 2323
Результат работы:

Code: Select all

23:03:52: Compiling
23:03:53: Compiled succesfully
23:03:53: 1234 1244 1242 1212
23:03:53: 1231 1231 2342 2323
23:03:53: 0 0 0 0
23:03:53: 0 0 0 0
23:03:53: 0 0 0 0
23:03:53: 0 0 0 0
23:03:53: 0 0 0 0
23:03:53: 0 0 0 0
23:03:53: 0 0 0 0
23:03:53: 0 0 0 0
23:03:53: Succesfully executed
23:03:53: Script(1084) stoped successfuly
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

Эх сколько еще нужно сделать...
но прогресс не стоит на месте...
скора мне нужно будет функции с переменным числом аргументов :lol: :twisted: шутю... но ваще класно было бы.. например WaitJournalMessage
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

Кароче.. Если серьезно забей на все, сделай чтобы вармод можно было менять, и кидать атаку, и работу со слоями 8).

Вот пожалуй простенькие вещи которые позволят в полной мере всем ощутить полезность проги... пойду пока регеть нюбов-войнов :twisted:
Last_Unicorn
Neophyte
Neophyte
Posts: 10
Joined: 17.02.2006 17:32
Contact:

Post by Last_Unicorn »

прошу прощения за поднятия топика такой давности, но возник вопрос: в данный момент чтение из файла происходит с помощью таких вот функций или что-то изменили ?
Image
ParadoX
Apprentice
Apprentice
Posts: 256
Joined: 17.03.2005 16:06

Post by ParadoX »

Code: Select all

type yt = array[0..200] of array[1..4] of word;

g          : yt;

procedure LoadTiles(lol : string); {30}
var Tmp, FileList : TStringList; M,N : Integer;
Begin 
  FileList := TStringList.Create(); 
  Tmp := TStringList.Create(); 
  FileList.LoadFromFile(lol);
for m:=0 to FileList.count-1 do 
  BEGIN
     StrBreakApart(FileList.Strings[m], ' ', Tmp); 
        for n:=0 to 3 do g[m+1][n+1]:=StrToInt(Tmp.Strings[n]); 
  END;
g[0][1]:=FileList.count;
  FileList.Free;
  Tmp.Free; 

End;
вот так мой фишинг по кусочкам и будет тут ) как видите все просто... помогает очень StrBreakApart - штучка.. ну g у меня глобальный массивчик... g[0][1] количество элементов... и это - специализировано для фишинга... если хочеш что там в стиле годов - читание журнальных строк то переделать просто... вот вобщем то и все что я хотел сказать по этой теме..
Post Reply