Используйте Unassigned
procedure TForm1.FldOnValidate(AField : TField);
begin
if Sender.OldValue <> Unassigned then
if Sender.NewValue <= Sender.OldValue then
raise Exception.Create('The new value is not bigger than the previous one');
end;
Но правильное место - OnChange
событие
procedure TForm1.ClientDataSet1ValChange(Sender: TField);
begin
if Sender.OldValue <> Unassigned then
if Sender.NewValue <= Sender.OldValue then
raise Exception.Create('The new value is not bigger than the previous one');
end;
вы можете писать в модуль, но вы также можете писать в строку
program foo
character(len=1024) :: filename
write (filename, "(A5,I2)") "hello", 10
print *, trim(filename)
end program
Обратите внимание (это второй трюк, о котором я говорил), что вы также можете построить строку формата программно .
program foo
character(len=1024) :: filename
character(len=1024) :: format_string
integer :: i
do i=1, 10
if (i < 10) then
format_string = "(A5,I1)"
else
format_string = "(A5,I2)"
endif
write (filename,format_string) "hello", i
print *, trim(filename)
enddo
end program
Я уже пробовал @Alejandro и @ user2361779, но это дает мне неудовлетворенный результат, такой как file 1.txt
или file1 .txt
вместо file1.txt
. Однако я нахожу лучшее решение:
...
integer :: i
character(len=5) :: char_i ! use your maximum expected len
character(len=32) :: filename
write(char_i, '(I5)') i ! convert integer to char
write(filename, '("path/to/file/", A, ".dat")') trim(adjustl(char_i))
...
Объяснение:
например. set i = 10
и write(char_i, '(I5)') i
char_i gives " 10" ! this is original value of char_i
adjustl(char_i) gives "10 " ! adjust char_i to the left
trim(adjustl(char_i)) gives "10" ! adjust char_i to the left then remove blank space on the right
Я думаю, что это простейшее решение, которое дает вам имя файла динамической длины без каких-либо устаревших пробелов от целочисленного до строкового преобразования.
Чтобы преобразовать целое число в строку:
integer :: i
character* :: s
if (i.LE.9) then
s=char(48+i)
else if (i.GE.10) then
s=char(48+(i/10))// char(48-10*(i/10)+i)
endif