Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (до версии 2009) - часть 6

Автор: akaGM
Дата сообщения: 07.12.2012 15:17
folta

Цитата:
собственно строка 123456789000

для 32-битного целого это переполнение...
или бери поменьше (до 2^32 - 1) или используй 64-разряда, если сидишь на64-дельфях...
Автор: salexn1
Дата сообщения: 07.12.2012 15:20
folta
Еще есть просто Help.

А что тут непонятного
Вы скидываете в процедуру текстовый вариант (1-ый параметр), а он пытается привести к тому типу, который вы передаете вторым параметром. 3-ий параметр всегда integer. Если все ОК - то 3-ий параметр = 0, если нет - то покажет ту позицию, где плохое число (точнее не число).
Автор: folta
Дата сообщения: 07.12.2012 15:26
akaGM
да нет...32-е у меня...
собственно, притопал к мысли, что массив из файла надо считывать побайтово..где-то пробегало, но не обратил внимание.
ладно.
раз уж нагородил, аппетит приходит во время еды)
можно задать на открытие любого файла, а не заданного этим?

Цитата:
TFileStream.Create(fmOpenRead)



Добавлено:
salexn1
у меня нету, вырезано к чертям.
приду, поищу родное и попытаюсь сделать как надо хелпом
Автор: akaGM
Дата сообщения: 07.12.2012 15:30
folta

Цитата:
массив из файла надо считывать побайтово..
а можно ещё раз задачу озвучить?
Автор: salexn1
Дата сообщения: 07.12.2012 15:32
folta
Ваш файл какой-то кривой zod.txt который У него кодировка UCS-2 Little Endian!

Мот отсюда проблемы?
Как только я поменял его в ANSI - все запалило...
Вот код..

Код:
var
S : String;
i : Integer;
key: array of Int64;
value: Int64;
aTextFile: TextFile;
begin
AssignFile(aTextFile, 'c:\zod.txt');
try
Reset(aTextFile);
while not Eof(aTextFile) do
begin
Readln(aTextFile, S);
value := StrToInt64(S);
Inc(i);
key[i] := value;
end;
finally
CloseFile(aTextFile);
end;
Автор: akaGM
Дата сообщения: 07.12.2012 15:43
salexn1

хорошая кодировка...

что-то у тебя с начальным i не того :)
Автор: salexn1
Дата сообщения: 07.12.2012 15:51
akaGM
Это я код автора взял и не заметил, что I - не инициализировано...
тут массив - дело второстепенное...
Автор: folta
Дата сообщения: 07.12.2012 19:56
akaGM
взять файл, считать из него целые цифры в массив, который тут же(второй кнопкой), вывести его в график TChar Series1.AddXY.
вот наверное сразу не учел кодировки и наличие иных символов.

salexn1
открыл акелпадом, 1251 ANSI.....создал новый блокнотом, та же кодировка.
открываю старым кодом, те же грабли.
а ваш тянет.
начал менять кодировку, все полетело в тартарары.

вобщем, уже читаю как вычитывать в массив потоком и побайтово. уж больно метод которым я тут жужжу, капризный.
не обессудьте, притопаю ещо со своими граблями.
Автор: alex1334
Дата сообщения: 07.12.2012 21:09
folta
Если вы будете использовать readln не забудьте что этот оператор читает только первое число и сразу перейдет к следущей строке. Последующий вызов readln уже будет читать число в новой строке файла. Таким образом если строка содержит несколько чисел то все числа кроме первого будут пропущены. Строки в файле разделяются символами перевод строки возврат каретки

могу предложить попробовать такой вариант (подходит только для ANSII но обладает универсальностью) -- объявить переменную как char и операторам read считывать символ за символом. если символ принадлежит множеству (0..9) то этот символ приписывается в конец некой временной переменной строкового типа в противном случае полученную строку преобразуем в integer число и затем строку обнуляем далее читаем следущий символ и как только встретится символ из множества то приписываем этот символ в конец строки и весь процесс повторяется
Автор: folta
Дата сообщения: 07.12.2012 21:13
и снова здравствуйте.
вот пример, что нужно в массив. можно то или то. какой метод внесения в массив из файла лучше использовать?
знаю, что надо было с этого начинать, но лучше поздно, чем никогда.
hex_log.txt
http://rghost.ru/42079417
text_log.txt:
http://rghost.ru/42079444
Автор: akaGM
Дата сообщения: 07.12.2012 21:39
folta
чтение/запись текстовых файлов на паскале одна из базовых и простейших операций,
тем более если ты сам формируешь эти файлы
и не надо никаких val()

1 21 31 41
2 22 32 42
3 23 33 43
4 24 34 44

for i ;= to 4 do
readln(x, y, z, w);

куда уж проще...
Автор: folta
Дата сообщения: 08.12.2012 11:08
доброе утро. всем.
вот, вроде читает любое, но из цифр получается фигня, без добавления функции intTostr никак?

Код:
procedure TForm2.RzButton2Click(Sender: TObject);
var
h: THandle;
key: array of Char;
len: Cardinal;
dummy: Cardinal;
i: Integer;
begin
h:=CreateFile('zod.txt', GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
len:=GetFileSize(h, nil);
SetLength(key, len);
ReadFile(h, key[0], len, dummy, nil);
CloseHandle(h);
for i:=0 to dummy-1 do
Memo1.Lines.Add(key[i]);
label1.Caption:=(key[i]);

end;
end.
Автор: akaGM
Дата сообщения: 08.12.2012 13:24
folta

я всё-таки не понял, каков формат файла?

12345679000000

и всё, одна строка? или сколько строк?
что здесь значимого?
и главное -- кто формирует этот файл: какая-то сторонняя программа или ты сам?
Автор: folta
Дата сообщения: 08.12.2012 13:53
akaGM
форматы файлов я выложил выше, на ргхосте.
формирует программа. выдает два идентичных лога, один хексовое, второй десятичное. оба в текстовом формате. оригиналы.
в логах могут быть и другие символы, слова. но интересуют только цифры.
пример второго:

Цитата:

49
492

NO CARRIER
13
1380
8049
49



Автор: akaGM
Дата сообщения: 08.12.2012 14:30
folta

ну приведи их здесь ещё раз под тегом more лично для меня :)


Цитата:
формирует программа
ну это твоя программа, ты в ней _сам пишешь_ в файл, или это некая данность?

Код: 13
1380
8049
49
Автор: folta
Дата сообщения: 08.12.2012 15:31
akaGM
[more]
49
492

NO CARRIER
13
1380
8049
49
[/more]
получить в массив числа 49,492,13,1380,8049,49.

программа не моя. она слушает порт и выдает лог.
пример под тегом.
каждое новое число нужное для занесения в массив начинается с новой строки.
как добавочное, в логе могут присутствовать что-то кроме целых чисел, но они не нужно.


Автор: akaGM
Дата сообщения: 08.12.2012 17:02
folta
глянь...

Код:
{$APPTYPE CONSOLE}

uses
SysUtils;

var
str: string;
nKeys: integer;
keys: array of integer;
fp: text;
itmp, i: integer;
begin
nKeys := 0;
setlength(Keys, 100000); // не очень красиво, но сойдёт...
assignfile(fp, 'test.txt');
reset(fp);
while not eof(fp) do begin
readln(fp, str);
writeln(str);
str := trim(str);
if (str = '') then continue;
try
itmp := StrToInt(str);
Keys[nKeys] := itmp;
inc(nKeys);
except
end;
end;

closefile(fp);

setlength(Keys, nKeys); // realloc
writeln('nKeys = ', nKeys);
for i := 0 to (nKeys-1) do
writeln(Keys[i]);

setlength(Keys, 0); // free
end.
Автор: folta
Дата сообщения: 08.12.2012 18:27
akaGM
уфф...проверял в критических условиях.
работает.
только изменил переменную
fp: text; >> f: TextFile;
надеюсь оно можно так.
все замечательно.
только консоль не понимаю, расшифровку.
открываю файл, в консоли содержимое-потом переменная 'nKeys=1'-дубль содержимого, без лишнего.
пример:
[more]
содержимое файла:

Цитата:

49
492

NO CARRIER
13
1380
8049
49



Цитата:
49
492
NO CARRIER
13
1380
8049
49
nKey = 6
49
492
13
1380
8049
49


так понимаю, это результат работы после отделение цифр от плевел.
спасибо.
пошел строить график)

[/more]
Автор: akaGM
Дата сообщения: 08.12.2012 18:53
folta

Цитата:
только консоль не понимаю, расшифровку.
открываю файл, в консоли содержимое-потом переменная 'nKeys=1'-дубль содержимого, без лишнего.
это через переводчик что ли пропущено?

это выдача на экран для контроля, убери все writeln() -- будет тихо...
Автор: folta
Дата сообщения: 09.12.2012 11:53
akaGM
все красиво.
просто я не знал как контролировать ход работы и прикладывал label или showmessage)

так, тут о TChar. не велите казнить.
что тут не так? надо по другому инициировать массив?!
или вообще я "нарубил"?
а может можно как не через код, а через TChar'овскую форму добавлять напрямую данные массива? но там только функции...
[more]
var
i: integer;
nKeys: array of integer;
begin
begin
Series1.Clear;

for i:= 1 to 100 do

Series1.AddXY(i, nKeys[i], '', clBlue);
end;
end;



так, обозначил кое-как:
nKeys: array [0..20000] of integer;
нету критической, но и график не рисует.
будем искать...с перламутровыми

а через Editing Char1>Series1>Data Source настроить выбегания графика?
пока методом тыка, и только так.
[/more]

Автор: R3Pa4eK
Дата сообщения: 09.12.2012 12:09
Всем привет! Появилась проблема с распаковкой Tak/OptimFROG в Delphi. Нашел заголовки в компоненте NewAC. Но ни черта не понял, что да как там. Например, по идее всё должно работать в этом коде, но выходной размер wav'ки 0 Кб:
[more=Код]
program wav_unpacker;

{$APPTYPE CONSOLE}

uses
Windows, SysUtils, DLLLoader, tak_decoder, Classes;

var
FDecoder: TTAKDecoder;
TAKFs, WAVFs: TFileStream;
FSize, Readed: Cardinal;
Buffer: Pointer;
FBuffer: Array of Byte;

begin
TAKFs:= TFileStream.Create('test.tak', fmOpenReadWrite);
FDecoder:= TTAKDecoder.Create(TAKFs);

FSize:= (FDecoder.SampleNum * ((FDecoder.SampleBits + 7) shr 3) * FDecoder.ChannelNum);

SetLength(FBuffer, FSize);

Buffer := @(FBuffer[0]);

Readed:= FDecoder.Read(Buffer, FSize);

WAVFs:= TFileStream.Create('test.wav', fmCreate);
WAVFs.Write(Buffer, FSize);
WAVFs.Free;
end.
[/more]
Автор: Frodo_Torbins
Дата сообщения: 09.12.2012 18:20
folta
Вы вообще в курсе про область видимости переменных?
Автор: folta
Дата сообщения: 09.12.2012 20:25
Frodo_Torbins
объявляя её в одной процедуре, она заканчивается c end. так?!
посмотрел в нете...
ага!

Цитата:
private
{ Private declarations }
public
{ Public declarations }

спасибо.
вот так и живу.



Добавлено:
и interface
Автор: alex1334
Дата сообщения: 09.12.2012 21:09
folta
У меня компилятор требует конец процедуры в виде end;

Завершение end. это конец модуля. Весь текст за этим оператором игнорируется и в исполняемый файл не включается
Автор: folta
Дата сообщения: 10.12.2012 14:29
alex1334
да не, точку я не к месту поставил.

что-то перегрузил я что-то,
не пропускает

Цитата:
Series1.AddArray(gfx);

E2250 There is no overloaded version of 'AddArray' that can be called with these arguments
вот все. nKey объявлена в private
[more]
var
gfx: array of integer;
i: integer;
begin
begin
Series1.Clear;

for i:= 1 to 20 do
begin
gfx[i]:=nkeys;
end;

Series1.AddArray(gfx);
end;
end;
[/more]
Автор: akaGM
Дата сообщения: 10.12.2012 14:43

Код: gfx[i]:=nkeys;
Автор: MagistrAnatol
Дата сообщения: 11.12.2012 14:55
Гопода, пробовал и SDAC & ADOConnection в реал тайме все подключается, в десигн тайме
[DBNETLIB]ConnectionOpen(Connect()) SQL-сервер не существует или отсутствует доступ.
Сервак MS SQL 2005
В чем прикол??

Добавлено:
если юзаю SQLConnection - получаю dbx error driver could not be properly initialized
Автор: GRom V
Дата сообщения: 15.12.2012 04:54
Подскажите плиз как скопировать ип???
Есть такая тема:
http := Form1.IdHTTP1;
strIP1 := http.Get('http://cmyip.com/');
strIP1 := copy(strIP1, pos('My IP Address Is ', strIP1) + 18, 15);
strIP1 := Trim(strIP1);

Но на сайте чет изменили и терь копируется фигня какая то!
И если не трудно обьясните эту сторку (strIP1, pos('My IP Address Is ', strIP1) + 18, 15);
Я не бетман не ругайтесь сильно
Автор: Kmich
Дата сообщения: 15.12.2012 06:36
GRom V

Цитата:
И если не трудно обьясните эту сторку (strIP1, pos('My IP Address Is  ', strIP1) + 18, 15);

это работа со строками, мы ищем позицию подстроки 'My IP Address Is  ' в strIP1 и копируем 15 символов из strIP1 с этой позиции+длинна текста подстроки

по идее можно использовать другой сайт если этот косячит (например http://checkip.dyndns.org/)
проверил что возвращает сайт получилось 81.236.41.150
а http://checkip.dyndns.org/ все нормально </head><body>Current IP Address: 87.216.40.150</body></html>
Автор: R3Pa4eK
Дата сообщения: 16.12.2012 20:29
Есть ли пример алгоритма BWT в Delphi?

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374

Предыдущая тема: MPO File


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.