Консультация № 36010
22.02.2006, 23:47
0.00 руб.
0 1 1
Мир вам, уважаемые эксперты!
В очередной раз нужен добрый совет...
Всяческие "вражеские" языки программирования (ну, фортран, например) имеют весьма мощные и удобные средства для форматированного ввода/вывода (речь о файлах). Другими словами позволяют без плясок с бубном читать/писать в файл "с соблюдением столбиков" (не смейтесь, это не так просто объяснить...), примерно так:

.500E-02: MU - TURBULENT VISCOSITY
1.4 :GAM - ADIABATIC EXPONENT
313. : T - INITIAL TEMPERATURE , K
N X Y SOURCE FACE
1 0.00 50.00 1 1
2 0.00 100.00 1 1
3 0.00 700.00 2 2

и т.д. и т.п.
Как это по-проще и по-правильней сделать в дельфях (требуется регулировка "положения" столбца, чтоб между числами всегда был пробел, число символов после запятой и пр.)
Как я сейчас делаю - см. приложение, но мне не нравится...
С уважением, Лука.

Приложение:
// Преобразуем число в строку длиной leng с commadig знаков после запятойFunction MyFormatFloat(x:double;leng,commadig:byte):string;var st:string;Begin st:=FloatToStrF(x,fffixed,leng-3,commadig); if Length(st)>=leng then st:=FloatToStrF(x,ffExponent,leng-6,2); while Length(st)<leng do st:=‘ ‘+st; Result:=st;End;

Обсуждение

давно
Мастер-Эксперт
425
4118
23.02.2006, 11:11
общий
это ответ
Здравствуйте, Luka!
Не знаю, как там в фортране, но в Вашей задаче пляски с бубном совершенно не нужны. :)
Если речь идет о том, чтобы красиво расположить данные в виде таблицы, то нужно воспользоваться средствами Write\WriteLn, которые задают общее количество знаков и количество знаков после запятой. Вот пример:
var
n, source, face: integer;
x, y: extended;
f: textfile;
Begin
AssignFile(f, ‘outfile.txt‘);
Rewrite(f);
{Это шапка}
WriteLn(f, ‘N‘:3, ‘X‘:5 ,‘Y‘:7, ‘SOURCE‘:7, ‘FACE‘:7);
For n:=1 to 3 do
{Процесс вычисления приводить не буду - это Ваше дело}
WriteLn(f, N:3, X:5:2 ,Y:7:2, SOURCE:7, FACE:7);
End;
Если речь идет только о том, чтобы вставить пробел между данными, то тут и вообще пустяки:
WriteLn(f, N, #32, X, #32, Y, #32, SOURCE, #32, FACE);
Но получится некрасиво - как у Вас. :)
Для более сложных случаев есть функция Format().
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа