Page 1 of 1
народ хельп как читать из файла..
Posted: 13.04.2005 16:05
by ParadoX
собственно как это сделать.....

дельфийские темы не помогают.. да и не узнает стелса типа переменной ТЕКСТ... в примерах дельфи вроде инт оф текс.. кароч шота такое немеренное.. кароче хелп ) как прочитать построчно.. да и еще.. я вот подумываю в инже круто можна было мутить через exec(waittargettile 1234 1234 1234 1234) к примеру... а как тута... нада придумать типа чтоб изменяло строки.. или сделать 4- мерный массив... кароч что от вас господа требуется.. дайте команды читки.. посимвольнои и построчно..
Posted: 14.04.2005 11:36
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.
Posted: 14.04.2005 13:26
by Miralex
В данном случае координаты каждого нового тайла начинаются с новой строки. При этом между Tile, X, Y и Z должен быть один пробел
Забыл сказать:
Для того чтобы работали методы:
TStringList.Delimiter и TStringList.DelimitedText
Необходимо иметь Stealth v0.51

Posted: 14.04.2005 16:42
by ParadoX
Miralex wrote:
Для того чтобы работали методы:
TStringList.Delimiter и TStringList.DelimitedText
Необходимо иметь Stealth v0.51

обьясни что это... я ваще не нашол подробного описания класса в котором эти методы... написано проста типа это для строк и тп и тд... но из чего состоит нету...
Posted: 14.04.2005 19:03
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
Posted: 15.04.2005 5:45
by Miralex
Read of address 00000025 at 1.466
TstringList использовал? Про метод Create не забыл
Скрипт покажи.
Posted: 15.04.2005 11:47
by ParadoX
Miralex wrote:
Read of address 00000025 at 1.466
TstringList использовал? Про метод Create не забыл
Скрипт покажи.
читай предыдущий пост.. я просил раскажи про класс этот... как его там..TStringList !!! а лучше ПРОСТО СКИНЬ КУСОК КОДА ГДЕ КЛАСС ОПИСАН ЭТОТ !!!!! тада я сам пойму что к чему...
ЗЫ:в нете толком не описан этот класс.. тока ляля тополя.. а методов нет..
Posted: 15.04.2005 12:23
by Miralex
Posted: 15.04.2005 13:24
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;
Posted: 15.04.2005 19:09
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
Posted: 16.04.2005 4:25
by ParadoX
Эх сколько еще нужно сделать...
но прогресс не стоит на месте...
скора мне нужно будет функции с переменным числом аргументов

шутю... но ваще класно было бы.. например WaitJournalMessage
Posted: 16.04.2005 4:34
by ParadoX
Кароче.. Если серьезно забей на все, сделай чтобы вармод можно было менять, и кидать атаку, и работу со слоями

.
Вот пожалуй простенькие вещи которые позволят в полной мере всем ощутить полезность проги... пойду пока регеть нюбов-войнов

Posted: 17.03.2006 16:56
by Last_Unicorn
прошу прощения за поднятия топика такой давности, но возник вопрос: в данный момент чтение из файла происходит с помощью таких вот функций или что-то изменили ?
Posted: 18.03.2006 16:51
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] количество элементов... и это - специализировано для фишинга... если хочеш что там в стиле годов - читание журнальных строк то переделать просто... вот вобщем то и все что я хотел сказать по этой теме..