1. Trang chủ
  2. » Công Nghệ Thông Tin

Những đặc điểm bổ sung về file

11 96 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 129,79 KB

Nội dung

Những đặc điểm bổ sung file Những đặc điểm bổ sung file Bởi: PGS TS NGƯT Phạm Văn Huấn Các file nội (Internal Files) Khi đơn vị file lệnh nhập xuất tên biến ký tự, lệnh chuyển liệu từ vùng lưu giữ nội nhớ sang vùng khác Những vùng lưu giữ gọi file nội (internal file) Thí dụ, ta đọc liệu từ xâu ký tự thay đọc từ dòng liệu file thông thường với lệnh sau đây: CHARACTER * 13 DATA1 INTEGER I, J REAL X DATA1 = '137 65 42.17' READ (DATA1, *) I, J, X Những lệnh có nghĩa khai báo biến có kiểu văn DATA1 với độ dài 13 ký tự Sau gán cho biến dòng văn bản: ‘137 65 42.17 ‘ Đó việc bình thường, biết từ trước đến Nhưng ý đến lệnh cuối Đó lệnh: READ (DATA1, *) I, J, X Trông lệnh giống lệnh đọc liệu bình thường, có khác thay đơn vị file cặp dấu ngoặc đơn ta đưa tên biến DATA1 vào Kết sau lệnh đọc đoạn văn biểu diễn chữ số 137, 65 42.17 đọc 1/11 Những đặc điểm bổ sung file số nguyên, số thực gán vào biến nguyên I, J biến thực X danh sách biến cần đọc lệnh READ cách đắn Sau lệnh giá trị biến số sau: I 137, J 65 X 42.17 Đây đặc điểm quan trọng Fortran Ta thấy ích lợi đặc điểm file nội qua thí dụ sau: INTEGER PTR REAL AMOUNT CHARACTER * 15 TEMP READ (12, 5) TEMP FORMAT (A10) IF (INDEX (TEMP, '$') NE 0) THEN PTR = INDEX (TEMP, '$') TEMP (PTR: PTR) = ' ' END IF READ (TEMP, *) AMOUNT Với đoạn chương trình liệu từ đơn vị file (12) thông thường (file ngoại) đọc vào biến ký tự TEMP Trong trường hợp liệu có kèm theo dấu $ bên trái (cách viết dấu đô la đằng trước dính liền số tiền người Mỹ thường làm), lệnh đọc READ (12,5) TEMP không mắc lỗi kiểu liệu Sau ta xử lý, thay ký tự $ ký tự dấu trống đọc lấy giá trị số thực AMOUNT lệnh đọc file nội READ (TEMP, *) AMOUNT Nhận thấy lệnh đọc liệu từ file nội hoàn toàn tương tự lệnh đọc file thông thường Thay số hiệu thiết bị hay số hiệu file, ta ghi tên biến (ở biến TEMP) vào vị trí thiết bị hay số hiệu file 2/11 Những đặc điểm bổ sung file Bây ta xét thí dụ sử dụng file nội để chuyển đổi liệu số thành liệu văn Giả sử ta muốn tạo 12 tên file ‘GIO.1’, ‘GIO.2’, , ‘GIO.12’ Đoạn chương trình sau làm việc đó: INTEGER J CHARACTER *6 TENF(12), TAM DO J = 1, 12 IF (J LT 10) THEN WRITE (TAM, ‘(I1)’) J ELSE WRITE (TAM, ‘(I2)’) J END IF TENF (J) = ‘GIO’ // ‘.’ // TAM END DO Các file truy nhập (Sequential Files) Các file sử dụng tất thí dụ từ trước tới gọi file truy nhập tuần file tạo ra, ta cập nhật ghi đơn lẻ Muốn thay đổi ghi, ta phải đọc thông tin ghi, sửa đổi sau ghi vào file khác Bây ta xét lệnh OPENphức tạpcó thêm định khác so với thí dụ trước đây: OPEN (UNIT = Biểu thức nguyên , * FILE = Biểu thức ký tự, * ACCESS = Biểu thức ký tự, * STATUS = Biểu thức ký tự, * FORM = Biểu thức ký tự, * IOSTAT = Biến nguyên, * RECL = Biểu thức nguyên, * BLANK = Biểu thức ký tự, * ERR = N hãn lệnh chuyển điều khiển ) 3/11 Những đặc điểm bổ sung file Biểu thức nguyên định UNIT, thường hằng, sử dụng lệnh READ WRITE để đơn vị file dùng Biểu thức ký tự định FILE tên file cần mở Hai định vừa quen dùng chương trước Biểu thức ký tự định ACCESS phải có giá trị 'DIRECT'' ‘SEQUENTIAL' dùng để file thuộc loại truy cập trực tiếp hay truy cập Nếu vắng mặt định ngầm định 'SEQUENTIAL' trước dùng Biểu thức ký tự định STATUS có giá trị ‘NEW' (để file tạo lệnh WRITE), 'OLD' (file tồn tại), ‘UNKNOWN’ (chưa rõ), 'SCRATCH' (file xuất, bị xóa chương trình kết thúc) Biểu thức ký tự định FORM có giá trị 'FORMATTED' 'UNFORMATTED' hay ‘BINARY’ Các file FORMATTED dùng với lệnh READ WRITE có định dạng dùng với lệnh nhập, xuất đơn giản Trong file UNFORMATTED liệu truy cập xâu nhị phân, số hay ký tự Nếu định FORM vắng mặt ngầm định ‘FORMATTED’ file ‘UNFORMATTED’ file trực tiếp IOSTAT dùng để khôi phục lỗi mở file Nếu lỗi mở file, biến nguyên có giá trị Nếu có lỗi, thí dụ không tìm thấy file với tên định, giá trị khác lưu biến Người ta thường kiểm tra giá trị biến để định hành động Thí dụ CHARACTER TEN *12, TEMP *70 PRINT *, ‘GO TEN FILE’ READ (*, ‘(A12)’) TEN OPEN (UNIT=15, FILE=TEN, STATUS=’OLD’, IOSTAT=IERR) IF (IERR EQ 0) THEN ELSE 4/11 Những đặc điểm bổ sung file PRINT*, ‘LOI MO FILE ‘,IERR END IF Đặc tả IOSTAT dùng với lệnh READ WRITE Chỉ định RECL cần cho file truy cập trực tiếp, không dùng với file truy cập Biểu thức nguyên định độ dài ghi Biểu thức ký tự định BLANK 'NULL' 'ZERO' Nếu đặc tả 'NULL' dấu trống trường số bị bỏ qua, 'ZERO' dấu trống xem số Ngầm định 'NULL' Chỉ định ERR tùy chọn có giá trị để xử lý lỗi Nếu lỗi xảy thực lệnh OPEN hay lệnh có chứa định chương trình chuyển điều khiển tới lệnh có nhãn ghi định ERR thay tạo lỗi thực chương trình Chỉ định ERR dùng với lệnh READ WRITE ? Lệnh CLOSE lệnh thực hiện, ngắt file ngoại khỏi chương trình Dạng tổng quát sau: CLOSE (UNIT = Biểu thức nguyên, * STATUS = Biểu thức ký tự, * IOSTAT = Biến nguyên, * ERR = Nhãn lệnh chuyển điều khiển) Lệnh CLOSE định tùy chọn Chỉ định STATUS lệnh CLOSE có giá trị ‘KEEP’ có nghĩa file giữ lại, ‘DELETE’ có nghĩa file không cần nên xóa ? Lệnh REWIND REWIND (UNIT = Biểu thức nguyên, * IOSTAT = Biến nguyên, * ERR = Nhãn lệnh điều khiển ) dùng để chuyển vị trí ghi thứ file ? Lệnh BACKSPACE 5/11 Những đặc điểm bổ sung file BACKSPACE (UNIT = Biểu thức nguyên, * IOSTAT = Biến nguyên, * ERR = Nhãn lệnh điều khiển ) chuyển vị trí đọc ngược lại phía trước ghi file ? Lệnh ENDFILE ENDFILE (UNIT = Biểu thức nguyên, * IOSTAT = Biến nguyên, * ERR = Nhãn lệnh điều khiển ) ghi vào file ghi kết thúc file file tạo Các file truy cập trực tiếp (Direct-Access Files) Các ghi file truy cập trực tiếp truy cập không theo cách tuần tự, mà theo thứ tự định chương trình Khi file trực tiếp mở, định ACCESS lệnh OPEN phải đặt ‘DIRECT’ độ dài ghi phải cho với định RECL Các lệnh READ WRITE phải chứa định REC để cung cấp số hiệu ghi cần truy cập Dạng tổng quát lệnh READ WRITE với file truy cập trực tiếp sau: READ (Số hiệu file, nhãn lệnh FORMAT, * REC =Biểu thứ nguyên) Danh sách biến WRITE (Số hiệu file, nhãn lệnh FORMAT, * REC = Biểu thức nguyên ) Danh sách biến Biểu thức nguyên định REC dùng để số hiệu ghi cần xử lý Các định ERR IOSTAT sử dụng với lệnh READ WRITE trực tiếp Tùy chọn END dùng với lệnh READ Khi tổ chức file truy cập trực tiếp, người ta thường sử dụng số thứ tự số hiệu phân biệt - phần ghi làm số hiệu ghi Thí dụ số hiệu phân biệt sinh viên trường đại học thường bắt đầu 00001 đến 00002 Do thông tin sinh viên số 00210 lưu ghi 210 Đôi thực số tính toán với trường ghi để nhận số hiệu 6/11 Những đặc điểm bổ sung file File truy cập trực tiếp thường tạo cách ghi thông tin vào cách tuần tự, với ghi bắt đầu tăng lên lần có ghi viết vào File xử lý theo thứ tự cách thay đổi số hiệu ghi từ đến tổng số tất ghi Tuy nhiên, ưu điểm file trực tiếp thể rõ muốn cập nhật thông tin số ghi file Thay đọc ghi cách tuần tự, tìm ghi mà ta muốn cập nhật, ta cần định số hiệu ghi ghi tự động xử lý Khi cập nhật thông tin xong, ta ghi thông tin vào ghi Nếu lệnh READ ta định số hiệu ghi mà ghi không tồn xảy lỗi Để khôi phục lỗi, định ERR cần phải có mặt lệnh READ Lệnh truy vấn INQUIRE Lệnh INQUIRE có hai dạng: INQUIRE ( FILE = biểu thức ký tự, danh sách định truy vấn ) INQUIRE ( UNIT = biểu thức nguyên, danh sách định truy vấn ) Lệnh lệnh thực hiện, truy vấn thông tin file hay số hiệu file Bảng 9.1 liệt kê định truy vấn Thí dụ: INQUIRE (FILE = 'TSDATA', SEQUENTIAL = TRALOI) INQUIRE (UNIT = 12, SEQUENTIAL = TRALOI) Bảng 11.1 Các định truy vấn lệnh INQUIRE Chỉ định truy vấn Kiểu biến Giá trị truy vấnfile FILE ACCESS = CHARACTER 'SEQUENTIAL''DIRECT' 'SEQUENTIAL''DIRECT BLANK = CHARACTER 'NULL''ZERO' 'NULL''ZERO' DIRECT = CHARACTER 'YES''NO' _ ERR = INTEGER Số hiệu lệnh xử lý lỗi Số hiệu lệnh xử lý lỗi EXIST = LOGICAL TRUE FALSE .TRUE FALSE FORM = CHARACTER 'FORMATTED''UNFORMATTED' 'FORMATTED''UNFORM FORMATTED = CHARACTER 'YES''NO''UNKNOWN' ? IOSTAT = INTEGER Mã lỗi NAME = CHARACTER ? Mã lỗi Giá trị truy vấnđơn vị file Tên file file không file loại scratch 7/11 Những đặc điểm bổ sung file NAMED + = LOGICAL _ TRUE FALSE NEXTREC = INTEGER Số hiệu ghi file truy cập trực tiếp Số hiệu ghi truy cập trực tiếp NUMBER + = INTEGER Đơn vị file ? OPEND = LOGICAL TRUE FALSE .TRUE FALSE RECL = INTEGER Độ dài ghi Độ dài ghi SEQUENTIAL = CHARACTER 'YES''NO''UNKNOWN' ? UNFORMATTED CHARACTER 'YES''NO''UNKNOWN' = ? Thí dụ 36: Sự tương tác người dùng chương trình Giả sử chương trình yêu cầu người dùng gõ tên file liệu để mở làm việc chương trình Trường hợp file không tồn tại, chương trình kết thúc lỗi thực Nếu ta dùng lệnh INQUIRE, chương trình xác định file có tồn không không tồn tại, chương trình nhắc người dùng gõ tên file khác Các lệnh sau thực tương tác này: CHARACTER *70 TENFIL, TIT LOGICAL XONG, OK, CO XONG = FALSE OK = FALSE PRINT *, 'NHAP TEN FILE' READ *, TENFIL IF (.NOT XONG) THEN INQUIRE (FILE = TENFIL, EXIST = CO) IF (.NOT CO) THEN PRINT *, 'FILE KHONG TON TAI' PRINT *, 'NHAP TEN KHAC HOAC GO THOI' READ *, TENFIL IF (TENFIL EQ 'THOI') XONG = TRUE ELSE 8/11 Những đặc điểm bổ sung file XONG = TRUE OK = TRUE ENDIF GOTO ENDIF IF (OK) THEN OPEN (UNIT = 10, FILE = TENFIL, STATUS = 'OLD') END IF END Bài tập Viết chương trình đếm in số ghi file DATA1 DATA2 Giả sử file file ghi chứa hai giá trị thực với format sau: FORMAT (F6.2, 1X, F6.2) Nếu lỗi xảy mở file, in thông báo lỗi thay in số ghi File TEM60.JAN lưu trường ba chiều nhiệt độ nước biển Đông tháng Giêng độ phân giải 1o kinh vĩ có quy cách ghi sau: Dòng gồm số nguyên cách kinh độ mép trái, kinh độ mép phải, vĩ độ mép trên, vĩ độ mép miền không gian số tầng sâu Dòng thứ hai ghi độ sâu (số nguyên) tầng Sau bảng giá trị nhiệt độ (số thực cách nhau) với số cột số điểm nút theo kinh tuyến, số dòng số điểm nút theo vĩ tuyến Các tầng ghi hoàn toàn tương tự Giá trị nhiệt độ khuyết rơi vào vùng đất liền ghi số 99.99 Viết chương trình tính giá trị nhiệt độ nước trung bình toàn biển Đông Với file số liệu tập 2, viết chương trình đọc thông tin file tạo cho điểm nút thuộc miền tính file đặt tên theo quy tắc sau: bắt đầu chữ K, sau đến chữ số kinh độ điểm, sau chữ V chữ số vĩ độ điểm, đuôi file ‘.BLN’ Trong file có quy cách ghi sau, dòng có số nguyên số tầng quan trắc thực tế điểm, dấu cách chữ số Sau liệt kê liên tiếp giá trị nhiệt độ tầng sâu ứng với nhiệt độ với dấu ngược lại 9/11 Những đặc điểm bổ sung file Giả sử có file liệu lưu giá trị quan trắc số yếu tố khí tượng thủy văn trạm hải văn, có quy cách ghi sau: - Dòng thứ có hai số nguyên cách dấu trống - Dòng thứ hai ghi tên trạm (không 100 ký tự) - Dòng thứ ba ghi hai số nguyên số dòng liệu (không 5000) số yếu tố quan trắc (không 12) cách dấu trống - Dòng thứ tư ghi tên yếu tố quan trắc, tên với định dạng A8 - Dòng thứ ghi đơn vị đo yếu tố quan trắc, với định dạng A8 - Mỗi dòng dòng tiếp sau ghi giá trị quan trắc yếu tố, giá trị ghi với định dạng F8.2 Viết chương trình cho phép nhập tên file từ bàn phím, đọc liệu lập phương trình hồi quy biến thứ (biến phụ thuộc) biến thứ hai (biến độc lập) In kết hình theo quy cách sau: giả sử tên biến thứ Tw, biến thứ hai Ta, phương trình phải viết có dạng: Tw = 0.915 Ta + 1.237 (Ghi chú: xem công thức phụ lục 3) Cải tiến chương trình tập phép người dùng tùy ý định biến phụ thuộc biến độc lập từ bàn phím Với file liệu mô tả tập 4, lập chương trình tính phương trình hồi quy nhiều biến yếu tố quan trắc thứ (biến phụ thuộc) yếu tố quan trắc 2, 3, 6, 8, In kết lên hình dạng phương trình hồi quy với tên yếu tố ghi file Gợi ý: Xem phương pháp thiết lập phương trình hồi quy tuyến tính nhiều biến phụ lục File HESOA.MAT lưu giá trị hệ số hệ phương trình đại số tuyến tính theo quy cách sau: Dòng thứ có số nguyên số phương trình Các dòng tiếp sau ghi giá trị hệ số, kể hệ số tự ứng với phương trình, phương trình dòng, hệ số ghi với định dạng F8.4, thí dụ: 1.1161 0.1254 0.1397 0.1490 1.5471 10/11 Những đặc điểm bổ sung file 0.1582 1.1675 0.1768 0.1871 1.6471 0.1968 0.2071 1.2168 0.2271 1.7471 0.2368 0.2471 0.2568 1.2671 1.8471 Viết chương trình đọc file giải hệ phương trình phương pháp loại biến Gauss Kết in hình gồm: viết lại hệ phương trình, sau cách dòng ghi nghiệm dòng cuối cùng, thí dụ, ứng với ma trận hệ số phải có kết sau: 1.1161X1 + 0.1254X2 + 0.1397X3 + 0.1490X4 = 1.5471 0.1582X1 + 1.1675X2 + 0.1768X3 + 0.1871X4 = 1.6471 0.1968X1 + 0.2071X2 + 1.2168X3 + 0.2271X4 = 1.7471 0.2368X1 + 0.2471X2 + 0.2568X3 + 1.2671X4 = 1.8471 1.04059 0.98697 0.93505 0.88130 Gợi ý: Xem phương pháp giải hệ phương trình đại số tuyến tính theo sơ đồ loại biến Gauss phụ lục File HESOAB.MAT lưu giá trị hệ số hệ phương trình đại số tuyến tính theo quy cách mô tả tập Giả sử ma trận hệ số A = [aij] ma trận đối xứng, tức aij = aji(i,j = 1,2, ,n) Hãy viết chương trình đọc file hệ số giải hệ phương trình In kết theo quy cách tập Gợi ý: Trường hợp ma trận hệ số A ma trận đối xứng, nên dùng phương pháp bậc hai để giải hệ phương trình đại số tuyến tính (phụ lục 2) 11/11 [...].. .Những đặc điểm bổ sung về file 0.1582 1.1675 0.1768 0.1871 1.6471 0.1968 0.2071 1.2168 0.2271 1.7471 0.2368 0.2471 0.2568 1.2671 1.8471 Viết chương trình đọc file và giải hệ phương trình bằng phương pháp loại biến Gauss Kết quả in ra màn hình gồm: viết lại hệ phương trình, sau đó... giải hệ phương trình đại số tuyến tính theo sơ đồ loại biến Gauss trong phụ lục 2 8 File HESOAB.MAT lưu các giá trị của các hệ số của hệ phương trình đại số tuyến tính theo quy cách như đã mô tả trong bài tập 7 Giả sử ma trận các hệ số A = [aij] là ma trận đối xứng, tức aij = aji(i,j = 1,2, ,n) Hãy viết chương trình đọc file các hệ số và giải hệ phương trình In kết quả theo quy cách của bài tập 7 Gợi ... lỗi Giá trị truy vấnđơn vị file Tên file file không file loại scratch 7/11 Những đặc điểm bổ sung file NAMED + = LOGICAL _ TRUE FALSE NEXTREC = INTEGER Số hiệu ghi file truy cập trực tiếp Số... chuyển điều khiển ) 3/11 Những đặc điểm bổ sung file Biểu thức nguyên định UNIT, thường hằng, sử dụng lệnh READ WRITE để đơn vị file dùng Biểu thức ký tự định FILE tên file cần mở Hai định vừa... (*, ‘(A12)’) TEN OPEN (UNIT=15, FILE= TEN, STATUS=’OLD’, IOSTAT=IERR) IF (IERR EQ 0) THEN ELSE 4/11 Những đặc điểm bổ sung file PRINT*, ‘LOI MO FILE ‘,IERR END IF Đặc tả IOSTAT dùng với lệnh READ

Ngày đăng: 29/12/2015, 10:08

w