[ Pobierz całość w formacie PDF ]
podano pola precyzja, zostaną przyjęte bieżące ustawienia.
26/!Pct vhb!qmjl x!ufltupxzdi!x!BvupMJTQjf 676
Tabela 15.4. Przykłady wywołania funkcji printf (c.d.)
(printf '("Cena wynosi .2f nowych zlotych.\n" cena))
Cena wynosi 130.25 nowych zlotych.
"Cena wynosi 130.25 nowych zlotych.\n"
To samo z podaniem specyfikatora precyzji.
(printf '("Cena wynosi %5f nowych zlotych.\n" cena))
Cena wynosi 130.2500 nowych zlotych.
"Cena wynosi 130.2500 nowych zlotych.\n"
Jeżeli nie podano specyfikatora formatu, minimalna wielkość pola szerokość jest równa sumie
liczby pól części całkowitej, pola kropki oraz liczby pól części dziesiętnej.
(printf '("Cena wynosi %10.2f nowych zlotych.\n" cena))
Cena wynosi 130.25 nowych zlotych.
"Cena wynosi 130.25 nowych zlotych.\n"
W przykładzie tym rezerwujemy 10 pól na zmienną rzeczywistą. Ponieważ zmienna po
przeformatowaniu zajmuje 6 pól, dodatkowe 4 spacje zostaną wstawione przed zmienną
zgodnie z podanym sposobem wyrównania.
(printf '("Cena wynosi %010.2f nowych zlotych.\n" cena))
Cena wynosi 0000130.25 nowych zlotych.
"Cena wynosi 0000130.25 nowych zlotych.\n"
Jak wyżej, z żądaniem wypełnienia pustych pól zerami.
(setq x1 1.25 y1 2.5 x2 1000.0 y2 125.766)
(printf '("X1 = %10.4f Y1 = %10.4f\nX2 = %10.4f Y2 =
%10.4f\n" x1 y1 x2 y2))
X1 = 1.2500 Y1 = 2.5000
X2 = 1000.0000 Y2 = 125.7660
"X1 = 1.2500 Y1 = 2.5000\nX2 = 1000.0000 Y2 =
125.7660\n"
Przykład wyrównania liczb w kolumnach.
(printf '("%s%10.4f%10s%10.4f\n%s%10.4f%10s%10.4f\n" "X1 =
" x1 "Y1 = " y1 "X2 = " x2 "Y2 = " y2))
X1 = 1.2500 Y1 = 2.5000
X2 = 1000.0000 Y2 = 125.7660
"X1 = 1.2500 Y1 = 2.5000\nX2 = 1000.0000
Y2 = 125.7660\n"
Jak wyżej, z dodatkowym odsunięciem kolumn. Do odsunięcia kolumn zalecam użycie spacji
zamiast znaku tabulacji.
(setq p1 '(2 4 6))
(printf '("Wspolrzedne punktu P1: %-8.2///t" "X=" "Y=" "Z="
p1)
Wspolrzedne punktu P1: X=2.00 Y=4.00 Z=6.00
"Wspolrzedne punktu P1: X=2.00 Y=4.00 Z=6.00 \n"
Wypisanie współrzędnych punktu z wyrównaniem lewostronnym.
(setq x1 -1.25 x2 34.0 x3 440.12)
(printf '("|%8.4f|%8.4f|%8.4f|\n" x1 x2 x3))
| -1.2500| 34.0000|440.1200|
"| -1.2500| 34.0000|440.1200|\n"
Przykład rozmieszczenia w wierszu 3 liczb rzeczywistych. Dla większej widoczności rozmiaru
pól są one oddzielone od siebie znakiem "|".
677 BvupMJTQ! !q3bluzd{oz!lv3t
Tabela 15.4. Przykłady wywołania funkcji printf (c.d.)
(setq x1 1 x2 34400 x3 24 x4 55)
(printf '("|%5i|%8i| |%i| |%i|\n" x1 x2 x3 x4))
| 1| 34400| |24| |55|
"| 1| 34400| |24| |55|\n"
To samo dla liczb całkowitych. Dodatkowo pomiędzy zmienne x2 i x3 wstawiono 3 spacje,
a pomiędzy zmienne x3 i x4 wstawiono 1 spację.
(printf '("%8.4f" 10))
Error: real value expected.
Błąd typu wartości podlegającej formatowaniu oczekiwano na liczbę rzeczywistą.
(printf '("%i" 10.0))
Error: integer value expected.
Błąd typu wartości podlegającej formatowaniu oczekiwano na liczbę całkowitą.
Poniżej pokazano sposób wykorzystania funkcji fprintf do zapisu zbioru danych MES
dla programu PAFEC FE.
;*************************************************PROG_117
;Przyklad zapisu do pliku wierszami z wykorzystaniem
;funkcji FPRINTF, zawartej w pliku PRINTF.LLB.
;Zapis do pliku $FILE_05.DAT.
;
;=================================================
;Funkcja zatrzymujaca realizacje programu,
;dopoki uzytkownik nie nacisnie ENTER...
;
(defun CZEKAJ ()
(progn
;----------
(getstring "\nNacisnij ENTER...")
(princ)
;----------
);progn
);CZEKAJ
;
;=================================================
;Funkcja tworzaca globalne listy wezlow i elementow.
;
(defun UTWORZ_LISTY_DANYCH ()
(progn
;----------
(setq
glob_lista_wezlow
'(
(1 "1" "2" (1.0 1.0 0.0) (0 1 5) (0) (0))
(2 "3" "4" (3.0 8.0 0.0) (0 1 2 7) (0) (0))
(3 "5" "6" (6.0 1.0 0.0) (0 2 3 5 6) (0) (0))
(4 "7" "8" (9.0 8.0 0.0) (0 3 4 7) (0) (0))
(5 "9" "A" (11.0 1.0 0.0) (0 4 6) (0) (0))
;ponizszy wezel nie jest uwzgledniony w
konstrukcji
;sluzy on jedynie do testowania zapisu do pliku
(100000 "id1" "id2"
26/!Pct vhb!qmjl x!ufltupxzdi!x!BvupMJTQjf 678
(1000000.0 1000000.0 1000000.0) (0) (0) (0)
)
)
glob_lista_elementow
'(
(1 "B" "C" (2.0 4.5 0.0) 1 34000 1 1 2)
(2 "D" "E" (4.5 4.5 0.0) 1 34000 1 2 3)
(3 "F" "10" (7.5 4.5 0.0) 1 34000 1 3 4)
(4 "11" "12" (10.0 4.5 0.0) 1 34000 1 4 5)
(5 "13" "14" (3.5 1.0 0.0) 2 34000 2 1 3)
(6 "15" "16" (8.5 1.0 0.0) 2 34000 2 3 5)
(7 "17" "18" (6.0 8.0 0.0) 3 34000 3 2 4)
)
);setq
;----------
(princ)
;----------
);progn
);UTWORZ_LISTY_DANYCH
;
;=================================================
;Funkcja zapisujaca w pliku modul sterujacy
;programem obliczajacym.
;
(defun ZAPISZ_MODUL_CONTROL ()
(progn
;----------
(princ "\nZapis modulu CONTROL.")
(fprintf
'("%s%s%s%s"
"CONTROL\n"
"PHASE=9\n"
"STRESS\n"
"CONTROL.END\n"
)
file_id
);fprintf
(princ " Zapisano.")
;----------
(princ)
;----------
);progn
);ZAPISZ_MODUL_CONTROL
;
;=================================================
;Funkcja zapisujaca w pliku dane o wezlach.
;
(defun ZAPISZ_WEZLY
(/ dlugosc licznik opis_wezla numer wspolrzedne
wsp_x wsp_y wsp_z
)
(progn
;----------
(if (> (length glob_lista_wezlow) 0)
(progn
;----------
679 BvupMJTQ! !q3bluzd{oz!lv3t
(princ "\nZapis wezlow. ")
(fprintf '("NODES\n") file_id)
(fprintf
'("NODE.NUMBER X Y
Z\n")
file_id
);fprintf
;
(setq
dlugosc (length glob_lista_wezlow)
licznik 0
);setq
(repeat dlugosc
(progn
;----------
(setq
opis_wezla (nth licznik glob_lista_wezlow)
numer (nth 0 opis_wezla)
wspolrzedne (nth 3 opis_wezla)
);setq
;
(setq
wsp_x (nth 0 wspolrzedne)
wsp_y (nth 1 wspolrzedne)
wsp_z (nth 2 wspolrzedne)
);setq
;
(fprintf
'("%5d %11.4f %11.4f %11.4f\n"
numer wsp_x wsp_y wsp_z
)
file_id
);fprintf
;----------
(setq licznik (1+ licznik))
;----------
);progn
);repeat dlugosc
;
(fprintf '("C END.OF.NODES\n") file_id)
(princ " Zapisano.")
;----------
);progn
);if
;----------
(princ)
;----------
);progn
);ZAPISZ_WEZLY
;
;=================================================
;Funkcja zapisujaca w pliku dane o elementach.
;
(defun ZAPISZ_ELEMENTY
(/ dlugosc licznik opis_elementu numer grupa typ
wlasciwosci wezel_1 wezel_2
26/!Pct vhb!qmjl x!ufltupxzdi!x!BvupMJTQjf 67:
)
(progn
;----------
(if (> (length glob_lista_elementow) 0)
(progn
;----------
(princ "\nZapis elementow. ")
(fprintf '("ELEMENTS\n") file_id)
(fprintf
'("%s%s\n"
"NUMBER GROUP.NUMBER ELEMENT.TYPE "
"PROPERTIES TOPOLOGY"
)
file_id
);fprintf
;
(setq
dlugosc (length glob_lista_elementow)
licznik 0
);setq
(repeat dlugosc
(progn
;----------
(setq
opis_elementu
(nth licznik glob_lista_elementow)
numer (nth 0 opis_elementu)
grupa (nth 4 opis_elementu)
typ (nth 5 opis_elementu)
wlasciwosci (nth 6 opis_elementu)
wezel_1 (nth 7 opis_elementu)
wezel_2 (nth 8 opis_elementu)
);setq
;
(fprintf
'("%6d %3d %4d %3d %d %d\n"
numer grupa typ wlasciwosci wezel_1 wezel_2
)
file_id
);fprintf
;----------
(setq licznik (1+ licznik))
;----------
);progn
);repeat dlugosc
;
(fprintf '("C END.OF.ELEMENTS\n") file_id)
(princ " Zapisano.")
);progn
);if
;----------
(princ)
;----------
);progn
);ZAPISZ_ELEMENTY
;
681 BvupMJTQ! !q3bluzd{oz!lv3t
;=================================================
;Funkcja glowna do zapisu danych w pliku.
;
(defun ZAPISZ_ZBIOR_DANYCH (/ file_id)
(progn
;----------
(setq file_id (open glob_filename_dat "w"))
(fprintf
'("C Zbior danych programu PAFEC FE\n") file_id)
(fprintf
'("C przygotowany przez program AutoCAD.\n") file_id)
(fprintf '("C\nC\n") file_id)
(ZAPISZ_MODUL_CONTROL)
(fprintf '("C\nC\n") file_id)
(ZAPISZ_WEZLY)
(fprintf '("C\nC\n") file_id)
(ZAPISZ_ELEMENTY)
(fprintf '("C\nC\n") file_id)
(fprintf '("END.OF.DATA\n") file_id)
(close file_id)
;----------
(princ)
;----------
);progn
);ZAPISZ_ZBIOR_DANYCH
;
;=================================================
;Ten fragment programu wykonywany jest
;automatycznie po jego zaladowaniu.
;
(setq
glob_filename_dat "$file_05.dat"
glob_filename_lib_1 "printf.llb"
glob_fullpath (findfile glob_filename_lib_1)
);setq
(if (= glob_fullpath nil)
(progn
(alert
(strcat
"Nie znaleziono pliku "
glob_filename_lib_1
".\n"
"Przerwanie wykonywania programu."
);strcat
);alert
(exit)
);progn
;
(progn ;else
(load glob_fullpath)
(UTWORZ_LISTY_DANYCH)
(textpage)
(princ "\nListy danych do zapisu.")
[ Pobierz całość w formacie PDF ]