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

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: yse
Дата сообщения: 29.07.2011 08:36
плз, подскажите разобраться в ошибке при создание файла выходит вот такая вот ошибка
fName := s; AssignFile(f, fName);
сам исходник файла
http://letitbit.net/download/64742.6357f248414cdd332194bbfbc978/Unit2.zip.html
Автор: Frodo_Torbins
Дата сообщения: 29.07.2011 10:07
yse
Какую ошибку выдает?
Файл, если он текстовый, лучше выложить прямо тут под тегом more.
Автор: JAPWork
Дата сообщения: 29.07.2011 11:06
yse
Какая ошибка? И что за имя у файла получается? Из исходника - совершенно непонятно окончательное значение имени перед AssignFile.

Добавлено

Вот такой скелет - работает...


Код:
var
Buf : ansistring;
WB : Integer;
begin
FileName := 'Qwe.txt';
Buf := 'Бла-бла-бла';
AssignFile(f, FileName);
Rewrite(f,1);
BlockWrite(F,Buf[1],Length(Buf),WB);
CloseFile(F);
Автор: alekc2008
Дата сообщения: 29.07.2011 20:44
подскажите пожалуйста есть класс

RateCount = class(TRemotable)
private
Ffree: Integer;
Fpaid: Integer;
published
property free: Integer read Ffree write Ffree;
property paid: Integer read Fpaid write Fpaid;
end;

и функция function updateM(const country_341_400: RateCount; const city_331_340: RateCount;...)
как мне присвоить значения free и paid в функции?
Автор: PrWork1
Дата сообщения: 29.07.2011 21:45
alekc2008
Функция updateM внутри класса?
Тогда вней присваиваешь значения прямо переменным Ffree и Fpaid

Если не внутри класса, тогда просто рабоаешь с экземплятьм объекта:

r: RateCount

r:=RateCount.create(...);

r.free:=56;
r.paid:=45;

.....
Автор: alekc2008
Дата сообщения: 29.07.2011 21:50

Цитата:
PrWork1

нет функция updateM не внутри класса
а если у меня параметров const country_341_400: RateCount;... и т.д. по убыванию 40 штук
мне нужно создавать переменную r 40 раз?
Автор: PrWork1
Дата сообщения: 29.07.2011 21:58
alekc2008
Но если действительно нужно 40 экземпляров объектов, то их все равно нужно будет где то создать.
Но, наверное, можно как-то по-другому объект описать, по приведенному примеру не понятно, что нужно..
Автор: alekc2008
Дата сообщения: 29.07.2011 22:06

Цитата:
PrWork1

ну да мне действительно нужно 40 экземпляров
спасибо за наводку у меня похоже все становится на свои места...
Автор: PrWork1
Дата сообщения: 29.07.2011 22:08
alekc2008
Да незачто... Подумайте, возможно класс как-то по другому построить можно.
Автор: Frodo_Torbins
Дата сообщения: 29.07.2011 22:37
alekc2008
Я надеюсь вы свои 40 экземпляров массивом передаете?
Автор: alekc2008
Дата сообщения: 30.07.2011 08:36

Цитата:
Frodo_Torbins

не совсем массив поля из базы данных
Автор: Frodo_Torbins
Дата сообщения: 30.07.2011 08:57
alekc2008
Просто приходилось видеть функции с десятками параметров одного типа - ужасное зрелище.
Автор: PrWork1
Дата сообщения: 30.07.2011 09:04
alekc2008
В базе эти значения хранятся.
Если эти значения нужны для преобразования данных в базе, то возможно их вообще не нужно тащить в дельфи, можно написать sql-запросом или хранимую процедуру, делающую то что нужно.

Если в базе эти значения только храняться, чтобы при запуске программы загрузить их в память, то можно сделать например, массив объектов, чтобы с ним было легче работать.
ПРо это и вопрос.
Автор: vunder
Дата сообщения: 01.08.2011 17:21
Объявил структуру и тип

Код:
tSingleComplex = record
case Integer of
1I, Q: Single);
2Re, Im: Single);
3X, Y: Single);
end;

pSingleComplexArray = ^tSingleComplexArray;
tSingleComplexArray = array[0..MaxInt div SizeOf(tSingleComplex)-1] of tSingleComplex;
Автор: Frodo_Torbins
Дата сообщения: 01.08.2011 20:05
vunder
Наверное дело в том, что у вас для счетчика цикла используется тот же символ что и для одного из полей записи. Уберите with - он здесь совершенно не нужен.
Автор: Cryogen2003
Дата сообщения: 02.08.2011 07:22
vunder
У тебя написано в ошибке, что нельзя левой части что либо присвоить. Наверное просто из-за того, что ты пытаешься присвоить с преобразованием типов значению, которое объявлено как константа (const Data). Может быть стоит пересмотреть это понятие константа или же просто разрешить в компиляторе присваивание константам.
Автор: vunder
Дата сообщения: 02.08.2011 08:50
Cryogen2003
Заменил const на var, все получилось, спасибо.

Frodo_Torbins
with там как раз нужен, без него конструкция будет очень громоздкой и нечитаемой:

Код:
tSingleComplexArray(Data)[I].I := IfThen(Abs(tSingleComplexArray(Data)[I].I) < fSigHeader.NormThresh, tSingleComplexArray(Data)[I].I/fSigHeader.NormThresh, 1.0);
tSingleComplexArray(Data)[I].Q := IfThen(Abs(tSingleComplexArray(Data)[I].Q) < fSigHeader.NormThresh, tSingleComplexArray(Data)[I].Q/fSigHeader.NormThresh, 1.0);
end
Автор: Cryogen2003
Дата сообщения: 02.08.2011 08:57
vunder
const - это переменная только на чтение
var - и на чтение, и на запись (как внутри процедуры, так и во вне)
out - только на запись
если не писать не один из этих параметров, то будет еще интереснее - работает и на чтение, и на запись, но на выход из процедуры(функции) ничего возвращаться не будет (аналог var, но без возвращения во вне)
Автор: vunder
Дата сообщения: 02.08.2011 09:00
Cryogen2003
Спасибо, только что нашел, где видел. Ссылка
Автор: yse
Дата сообщения: 03.08.2011 10:38
[подскажите чайнику]
да все может так но все таки показывает на строку ошибка Reset(f); // открыть для чтения

(вопрос , может такое быть что файл не существует или файл не найден для чтения по этому не может открыть файл и выдает такую ошибку ,ошибка Reset(f); // открыть для чтения.
сам огрызок из мутного исходника
function GetSpecialPath(CSIDL: word): string;
var s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, true)
then s := '';
result := PChar(s);
end;

function read(s:string):string;
var
f: TextFile; // файл
fName: String[80]; // имя файла
buf: string[80]; // буфер для чтения из файла
begin
fName := s; AssignFile(f, fName);

Reset(f); // открыть для чтения


// чтение из файла
while not EOF(f) do
begin
readln(f, buf); // прочитать строку из файла
result:=(buf); // добавить строку в поле Memo1
end;

CloseFile(f); // закрыть файл

может сюда then s := ''; нужно добавить существующий файл который должен быть открытым для чтения или я ошибаюсь
Автор: murkovich
Дата сообщения: 03.08.2011 11:11
yse
Разумеется, если GetSpecialPath не найдет путь, то Reset на несуществующий файл выдаст ошибку. Это уже от логики программы зависит, как из такой ситуации выходить. Из фрагмента совем не ясно, с каким параметром вызывается read();
Автор: yse
Дата сообщения: 03.08.2011 11:25
да конечно чтоб не копипастить
ссылка на исходник: http://webfile.ru/5471358

расширение измените на .pas
Автор: JAPWork
Дата сообщения: 03.08.2011 12:43
yse
Ошибка какая? Не "The specified file was not found"?
Отладчик что показывает на момент AssignFile? Какое там имя файла? Такой файл по этому пути точно есть?
Или ошибка "Read beyond end of file"? Тогда Reset нужно с параметром, соответствующим длине блока, который считывается за раз. Как правило, указывают "1", а потом используют BlockRead с указанием количества считываемых байт.
Автор: yse
Дата сообщения: 03.08.2011 13:39
Project BODY.exe raised exception class EInOuError with message 'file not found.Process stopped.use Step or run to continue


нo сам .ехе как странно создается

Добавлено:
а как сделатъ тогда если файл не сушествует то создать


можно ли так сделлатъ
if not FileExists(fName) then
begin
AssignFile(f, fName);
try
try
Rewrite(f);
except
end;
finally
CloseFile(f);
end;
result:='';
Exit;
end;

и что добавить в результат или оставить пустым
result:='';
Автор: JAPWork
Дата сообщения: 03.08.2011 14:49
yse
То, что .exe создается, так это так и должно быть. Ошибок компиляции нет - получите исполняемый файл.

Создавать таким образом файл - можно. Относительно результата - ваша функция вроде бы возвращает последнюю строку из файла (ведь так получается?). А если файл пустой, то логично - вернуть пустую строку.
Хотя тут все зависит от того, что Вам нужно.
Кстати, комментарий в цикле до EOF насчет добавления в Memo1 странный. То, что Вы в цикле последовательно результату присвоите значение всех строк в файле вовсе не означает, что по окончанию работы функции Read у Вас чудесным образом в результате будут все строки. Там будет только последняя...
Автор: Man_Without_Face
Дата сообщения: 04.08.2011 11:31
Столкнулся с такой проблемой. Была установлена Delphi 2009, после установки Delphi 2011 при запуске 2009 выдает ошибку: "value cannot be null. Parameter name: key"
[more] [21D7B652]{dotnetcoreide120.bpl} InteropApp.MSBuildRegisterTaskHost (Line 1350, "InteropApp.pas" + 2) + $40
[5000CC8D]{rtl120.bpl } System.@CheckAutoResult (Line 21634, "System.pas" + 6) + $0
[21D7B652]{dotnetcoreide120.bpl} InteropApp.MSBuildRegisterTaskHost (Line 1350, "InteropApp.pas" + 2) + $40
[21D78232]{dotnetcoreide120.bpl} InteropApp.TInteropHostAppManager.ResolveTempTaskHostStorage (Line 419, "InteropApp.pas" + 5) + $2B
[21D777CE]{dotnetcoreide120.bpl} InteropApp.TInteropHostAppManager.Create (Line 268, "InteropApp.pas" + 48) + $3
[21DADCEF]{dotnetcoreide120.bpl} DotNetReg.TDotNetRegEvents.RegisterInteropHostApp (Line 71, "DotNetReg.pas" + 0) + $7
[20B86E91]{designide120.bpl} Events.TEvent.Send (Line 103, "Events.pas" + 2) + $11
[00415221]{bds.exe } AppMain.TAppBuilder.CMPostCreateInit (Line 1863, "ui\AppMain.pas" + 18) + $8
[501D0C0E]{vcl120.bpl } Controls.TControl.WndProc (Line 6642, "Controls.pas" + 91) + $6
[501F8F11]{vcl120.bpl } Forms.Default (Line 9108, "Forms.pas" + 1) + $2A
[501F9686]{vcl120.bpl } Forms.TApplication.WndProc (Line 9300, "Forms.pas" + 175) + $1
[501D529B]{vcl120.bpl } Controls.TWinControl.WndProc (Line 9336, "Controls.pas" + 136) + $6
[501F0FA4]{vcl120.bpl } Forms.TCustomForm.WndProc (Line 3902, "Forms.pas" + 191) + $5
[501D49B4]{vcl120.bpl } Controls.TWinControl.MainWndProc (Line 9065, "Controls.pas" + 3) + $6
[50058938]{rtl120.bpl } Classes.StdWndProc (Line 12723, "Classes.pas" + 8) + $0
[501CB996]{vcl120.bpl } Controls.FindControl (Line 2999, "Controls.pas" + 6) + $9
[501F9EC7]{vcl120.bpl } Forms.TApplication.ProcessMessage (Line 9613, "Forms.pas" + 23) + $1
[501F9F0A]{vcl120.bpl } Forms.TApplication.HandleMessage (Line 9643, "Forms.pas" + 1) + $4
[501FA235]{vcl120.bpl } Forms.TApplication.Run (Line 9780, "Forms.pas" + 26) + $3
[004259D2]{bds.exe } bds.bds (Line 196, "" + 7) + $7 [/more]
На 2009 стоит первый апдейт, свежепоставленная winXP sp3. При сносе 2011, 2009 запускается. Как это можно исправить?
Автор: Frodo_Torbins
Дата сообщения: 04.08.2011 12:11
Man_Without_Face
Попробуйте накатить на 2009 все апдейты. Последний из них, кажется, как раз и нужен был для совместимости с новыми версиями делфей.
Автор: Man_Without_Face
Дата сообщения: 04.08.2011 14:09
Frodo_Torbins
Так и сделал. В варезнике, в шапке ссылка на Update 3, Update 4, Boost Update. Стало еще хуже:
Exception EAccessViolation in module rtl120.bpl at 00000000.
Access violation at adress 00000000. Read of address 00000000.

Автор: Frodo_Torbins
Дата сообщения: 04.08.2011 15:02
Man_Without_Face
Это на чистой делфе без доп. компонент?
Автор: Man_Without_Face
Дата сообщения: 04.08.2011 15:24
Frodo_Torbins
Да, Delphi Win32, .NET, C++ Builder
+ хелп.
Поставил Update 1, потом Update 3, Update 4, Boost Update.
Может нужен другой кряк? В варезнике ссылка мертвая.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


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