Phần mở rộng tệp MATLAB. Dấu ngắt câu lệnh lặp

Nhược điểm của các chức năng lưu và tải được mô tả là chúng hoạt động với một số định dạng tệp nhất định (thường là tệp mat) và không cho phép tải hoặc lưu dữ liệu ở các định dạng khác. Trong khi đó, cần phải tải thông tin, ví dụ, từ các tệp nhị phân do người khác tạo ra. sản phẩm phần mềmđể xử lý thêm các kết quả trong MatLab. Vì mục đích này, các chức năng đã được phát triển

fwrite (<идентификатор файла>, <переменная>, <тип данных>);

<переменная>= fread (<идентификатор файла>);
<переменная>= fread (<идентификатор файла>, <размер>);
<переменная>= fread (<идентификатор файла>, <размер>, <точность>);

Ở đây<идентификатор файла>là một con trỏ đến tệp để làm việc. Để lấy mã định danh, hàm được sử dụng

<идентификатор файла>= fopen (<имя файла>,<режим работы>);

tham số ở đâu<режим работы>có thể lấy các giá trị được hiển thị trong bảng. 5.1.

Bảng 5.1. Các chế độ làm việc với tệp trong MatLab

tham số<режим работы>

sự mô tả

ghi (xóa nội dung trước đó của tệp)

chắp thêm (tạo một tệp nếu nó không tồn tại)

đọc và ghi (không tạo tệp nếu tệp không tồn tại)

đọc và ghi (xóa nội dung cũ hoặc tạo tệp nếu nó không tồn tại)

đọc và thêm (tạo một tệp nếu nó không tồn tại)

một tham số bổ sung có nghĩa là làm việc với tệp nhị phân ví dụ: ‘wb’, ‘rb’ ’‘ rb + ’,‘ ​​ab ’, v.v.

Nếu vì một lý do nào đó, hàm fopen () không thể mở tệp một cách chính xác, thì nó sẽ trả về -1. Dưới đây là một đoạn chương trình để ghi và đọc dữ liệu từ tệp nhị phân:

A =;

fid = fopen ("my_file.dat", "wb"); % mở tệp để viết

error ("Tệp không được mở");
kết thúc

fwrite (fid, A, "double"); % ghi ma trận vào tệp (40 byte)
fclose (fid); % Đóng tập tin

fid = fopen ("my_file.dat", "rb"); % mở tệp để đọc
if fid == -1% kiểm tra xem việc mở có đúng không
error ("Tệp không được mở");
kết thúc

B = fread (fid, 5, "double"); % đọc 5 giá trị kép
disp (B); % hiển thị trên màn hình
fclose (fid); % Đóng tập tin

Kết quả của hoạt động của chương trình này, một tệp 40 byte my_file.dat sẽ được tạo trong thư mục làm việc, sẽ chứa 5 giá trị thuộc loại đôiđược viết dưới dạng một chuỗi các byte (8 byte cho mỗi giá trị). Hàm fread () đọc các byte được lưu trữ tuần tự và tự động chuyển đổi chúng thành kiểu kép, tức là mỗi 8 byte được hiểu là một giá trị kép.

Trong ví dụ đã cho, số phần tử (năm) cần đọc từ tệp đã được chỉ ra rõ ràng. Tuy nhiên, tổng số phần tử thường không được biết trước, hoặc nó thay đổi trong quá trình hoạt động của chương trình. Trong trường hợp này, tốt hơn là bạn nên đọc dữ liệu từ tệp cho đến khi đến cuối tệp. Có một chức năng trong MatLab để kiểm tra xem đã đến cuối tệp chưa

feof (<идентификатор файла>)

trả về 1 khi đến cuối tệp và 0 nếu không. Hãy viết lại chương trình để đọc một số phần tử kép tùy ý từ tệp đầu vào.

fid = fopen ("my_file.dat", "rb"); % mở tệp để đọc
nếu fid == -1
kết thúc

B = 0; % biến khởi tạo
cnt = 1; khởi tạo% bộ đếm
vòng lặp while ~ feof (fid)% cho đến khi đạt đến cuối tệp
= fread (fid, 1, "double"); % đọc một
% double value (V chứa giá trị
% mục, N - số mục đã đọc)
nếu N> 0% nếu phần tử được đọc thành công, thì
B (cnt) = V; % tạo một vectơ hàng từ các giá trị V
cnt = cnt + 1; % tăng bộ đếm lên 1
kết thúc
kết thúc
disp (B); % hiển thị kết quả trên màn hình
fclose (fid); % Đóng tập tin

Trong chương trình này, một vectơ hàng được tạo động khi các phần tử được đọc từ tập tin đầu vào... MatLab tự động tăng số chiều của vectơ nếu chỉ số của phần tử tiếp theo lớn hơn 1 so với chỉ số tối đa. Tuy nhiên, một thủ tục như vậy tốn rất nhiều thời gian của máy và chương trình bắt đầu chạy chậm hơn đáng kể so với khi thứ nguyên của vectơ B ngay từ đầu được xác định bằng 5 phần tử, chẳng hạn như thế này.

Cũng cần lưu ý rằng hàm fread () được viết với hai tham số đầu ra là V và N. Tham số đầu tiên chứa giá trị của mục đã đọc và tham số thứ hai chứa số lượng mục đã đọc. V trong trường hợp này giá trị N sẽ bằng 1 mỗi khi thông tin được đọc từ tệp một cách chính xác và 0 khi ký tự dịch vụ EOF được đọc, cho biết phần cuối của tệp. Kiểm tra bên dưới cho phép bạn tạo một vectơ có giá trị B một cách chính xác.

Dữ liệu chuỗi cũng có thể được lưu trữ bằng cách sử dụng hàm fwrite () và fread (). Ví dụ, cho chuỗi

str = "Xin chào MatLab";

fwrite (fid, str, "int16");

Kiểu int16 được sử dụng ở đây, vì khi làm việc với các chữ cái tiếng Nga, hệ thống MatLab sử dụng biểu diễn hai byte của mỗi ký tự. Dưới đây là một chương trình để ghi và đọc dữ liệu chuỗi sử dụng hàm fwrite () và fread ():

fid = fopen ("my_file.dat", "wb");
nếu fid == -1
error ("Tệp không được mở");
kết thúc

str = "Xin chào MatLab"; % chuỗi để viết
fwrite (fid, str, "int16"); % ghi vào tệp
fclose (fid);

fid = fopen ("my_file.dat", "rb");
nếu fid == -1
error ("Tệp không được mở");
kết thúc

B = ""; khởi tạo% chuỗi
cnt = 1;
while ~ feof (fid)
= fread (fid, 1, "int16 => char"); % đọc hiện tại
% ký tự và chuyển đổi
% trong số đó trong kiểu char
nếu N> 0
B (cnt) = V;
cnt = cnt + 1;
kết thúc
kết thúc
disp (B); % dòng hiển thị trên màn hình
fclose (fid);

Kết quả của việc thực hiện chương trình sẽ như thế nào

Chúng tôi hy vọng chúng tôi đã giúp bạn giải quyết vấn đề với tệp MATLAB. Nếu bạn không biết nơi bạn có thể tải xuống ứng dụng từ danh sách của chúng tôi, hãy nhấp vào liên kết (đây là tên của chương trình) - bạn sẽ tìm thấy thêm thông tin chi tiết liên quan đến nơi để tải xuống két sắt phiên bản cài đặtứng dụng bắt buộc.

Truy cập trang này sẽ giúp bạn trả lời cụ thể những câu hỏi sau, hoặc những câu hỏi tương tự:

  • Làm cách nào để mở tệp có phần mở rộng MATLAB?
  • Làm cách nào để chuyển đổi tệp MATLAB sang định dạng khác?
  • Phần mở rộng định dạng tệp MATLAB là gì?
  • Những chương trình nào hỗ trợ tệp MATLAB?

Nếu sau khi xem nội dung trên trang web này, bạn vẫn chưa nhận được câu trả lời thỏa đáng cho bất kỳ câu hỏi nào ở trên, điều này có nghĩa là thông tin liên quan đến tệp MATLAB được trình bày ở đây là không đầy đủ. Liên hệ với chúng tôi bằng cách sử dụng biểu mẫu liên hệ và viết những thông tin bạn không tìm thấy.

Điều gì khác có thể gây ra sự cố?

Có thể có nhiều lý do khiến bạn không thể mở tệp MATLAB (không chỉ do không có ứng dụng tương ứng).
Lúc đầu- Tệp MATLAB có thể được liên kết không chính xác (không tương thích) với ứng dụng đã cài đặtđể phục vụ nó. Trong trường hợp này, bạn cần tự thay đổi liên kết này. Cuối cùng, nhấp chuột phải vào tệp MATLAB bạn muốn chỉnh sửa, nhấp vào tùy chọn "Mở bằng" và sau đó chọn chương trình bạn đã cài đặt từ danh sách. Sau khi thực hiện việc này, sự cố khi mở tệp MATLAB sẽ hoàn toàn biến mất.
Thứ hai- tập tin bạn muốn mở có thể bị hỏng. Khi đó, giải pháp tốt nhất là bạn nên tìm phiên bản mới hoặc tải lại từ chính nguồn như trước (có thể vì lý do nào đó trong phiên trước việc tải tệp MATLAB chưa hoàn thành và không thể mở được đúng cách).

Bạn có muốn giúp không?

Nếu bạn có thông tin thêm Về phần mở rộng tệp MATLAB, chúng tôi sẽ biết ơn nếu bạn chia sẻ nó với người dùng trang web của chúng tôi. Sử dụng biểu mẫu được cung cấp và gửi cho chúng tôi thông tin tệp MATLAB của bạn.

Tệp là đối tượng khá phổ biến trong hệ thống MATLAB. Một số loại tệp đã được thảo luận trong các chương trước. Bài học này bao gồm các thuộc tính tệp độc lập với loại của chúng và áp dụng cho bất kỳ tệp nào.

Tập tin thường là một số tập hợp dữ liệu, được thống nhất bởi một tên. Loại tệp thường được xác định bởi phần mở rộng của nó. Chúng tôi xem xét toàn bộ tệp, mặc dù về mặt vật lý trên đĩa, nó có thể được thể hiện bằng một số khu vực - họ nói rằng trong trường hợp này tệp bị phân mảnh.

Trước khi sử dụng bất kỳ tệp nào, nó phải được mở ra, và khi kết thúc sử dụng - đóng cửa... Nhiều tệp có thể được mở và đọc cùng một lúc. Hãy xem xét các lệnh để mở và đóng tệp.

  • Chỉ huy mở tên, trong đó tên phải chứa một mảng ký tự hoặc một biến tượng trưng, ​​sẽ mở tệp tùy thuộc vào cách phân tích cú pháp của tham số tên và phần mở rộng trong tên tên:
    • Biến đổi- mở một mảng được đặt theo tên trong Array Editor;
    • .chiếu- Mở tệp, lưu các biến trong cấu trúc trong vùng làm việc;
    • .quả sung- mở nó trong Trình chỉnh sửa thuộc tính;
    • .NS- mở tệp m trong trình chỉnh sửa-gỡ lỗi;
    • .mdl- mở mô hình trong Simulink;
    • .NS- mở, nếu có, một tệp m có cùng tên;
    • .html- mở ra Tài liệu HTML trong trình duyệt trợ giúp.

Nếu tệp có phần mở rộng tồn tại trong đường dẫn MATLAB, thì tệp được trả về bằng lệnh có tên được mở, nếu không, thì tệp từ hệ thống tập tin... Nếu tệp không có phần mở rộng tên, thì nó sẽ được mở bởi chương trình có định dạng tệp sẽ được phát hiện bởi hàm which ("tên tệp"). Theo mặc định, cái mở được gọi cho tất cả các tệp có phần cuối khác với phần được liệt kê bên trên. Open gọi các hàm orepxxx, trong đó xxx là phần mở rộng của tệp. Các ngoại lệ là các biến không gian làm việc mà openvar được gọi và đồ họa mà openim được gọi. Bằng cách tạo t-tệp có tên orepxxx, người dùng có thể thay đổi cách xử lý tệp và thêm phần mở rộng mới vào danh sách. Đóng các tệp được mở khi giúp mở, bạn cần từ các trình chỉnh sửa có tên là onxxx.

  • = uigetfile (FILTERSPEC. Tiêu đề)... Mở hộp thoại có tên Tiêu đề và bộ lọc FILTERSPEC (ví dụ: mảng ô chứa phần mở rộng tệp) và trả về tệp được người dùng chọn và đường dẫn đến tệp. Trả về FILENAME = 0 nếu tệp không tồn tại hoặc nếu người dùng nhấp vào Hủy. = uigetfile (FILTERSPEC, Title. X. Y) đặt hộp thoại tại điểm X, Y (tọa độ tính bằng pixel).

Uigetfile ("*. M; *. Hình; *. Mat: *. Mdl", "Tất cả Tệp MATLAB (* .m, * .fig, * .mat. * .Mdl)") ...

  • = uiputfile (FILTERSPEC. TITLE) lưu tệp trong hộp thoại do người dùng kiểm soát. Các tham số giống như trong hàm uigetfile.
  • Chỉ huy ui mở mở một hộp thoại và nếu người dùng đã chọn một tệp có phần mở rộng đã biết, hãy gọi tệp đó bằng cách sử dụng mở hoặc nếu tên tệp có phần mở rộng không xác định thì uigetfile được gọi. Các đối số đầu vào cho uiopen có thể là mat lab, load, figure, simulink, editor. Không có đối số đầu vào hoặc với matlab đối số đầu vào, hộp thoại nhắc bạn chọn * .m, * .fig, * .mat, * .mdl (nếu Simulink được cài đặt), * .cdr (nếu dòng trạng thái được cài đặt), * .rtw, *. tmf, * .tlc, * .c, * .h, * .ads, * .adb (nếu cài đặt Real-Time Workshop). Với đối số tải - * .mat. Với đối số figure, * .fig được đưa ra; mực simul - * .mdl, trình soạn thảo - * .m, * .mdt * .cdr, * .rtw, * .tmf, * .tlc, * .c, * .h, * .ads, * .adb.

Mở hình

  • Chỉ huy uiload mở tệp trong hộp thoại do người dùng kiểm soát bằng lệnh trọng tải.

Hàm số ui nhập khẩu Ra mắt Thuật sĩ nhập khẩu(Trình hướng dẫn Nhập), nhập từ một tệp trong thư mục hoặc bộ đệm hiện tại Chia sẻ Windows... Cô ấy phù hợp với sự lựa chọn Nhập dữ liệu từ menu Tập tin hoặc sự lựa chọn Dán đặc biệt từ menu Chỉnh sửa MATLAB.

  • nhập ui (FILENAME)- khởi chạy Trình hướng dẫn nhập bằng cách mở FILENAME. Trình hướng dẫn nhập hiển thị dữ liệu cho xem trước... Dữ liệu và biểu diễn của nó dưới dạng các biến MATLAB xuất hiện trong cửa sổ xem trước. Dữ liệu thực tế, văn bản và tiêu đề được trình bày khác nhau Các biến MATLAB... Đối với dữ liệu ASCII, bạn phải đảm bảo rằng Trình hướng dẫn nhập nhận dạng các dấu phân cách cột. Riêng nó, nó chỉ có thể nhận ra một tab, dấu cách, dấu phẩy hoặc dấu chấm phẩy. Bạn cần bấm vào nút Kế tiếp và trong cửa sổ tiếp theo, xác nhận việc lựa chọn dấu phân cách do Trình hướng dẫn thực hiện hoặc chọn Khác và nhập bất kỳ dấu phân tách nào.
  • ui nhập ("-tệp")- trước hết hiển thị hộp thoại chọn tệp.
  • ui nhập ("-pastespecial")- trước hết hiển thị nội dung của bảng tạm Windows để xem trước.
  • S = ui nhập (...) lưu trữ các biến kết quả dưới dạng các trường của cấu trúc S.
  • Chỉ huy uisave - do người dùng điều khiển lưu (lệnh lưu được mô tả trong bài 2) bằng hộp thoại Windows.
  • Hàm số lưu thành- lưu bản vẽ hoặc mô hình Simulink ở định dạng mong muốn trên phương tiện lưu trữ hoặc trên thiết bị hỗ trợ in.
  • Hàm số saveas (H, "FILENAME")- lưu dữ liệu theo lệnh đồ họa bộ mô tả H trong tệp FILENAME. Định dạng tệp được xác định bởi phần mở rộng của tên FILENAME.
  • Hàm số saveas (H. "FILENAME". "ĐỊNH DẠNG")- thực hiện tương tự, nhưng với tham số FORMAT (định dạng được chỉ định theo cách giống như phần mở rộng tên tệp và có thể khác với nó). FORMAT được ưu tiên hơn phần mở rộng tên tệp. Tham số chức năng:
    • "quả sung"- lưu hình (đồ thị) trong một tệp tin nhị phân;
    • "NS" hoặc "mfig"- lưu hình trong một tệp tin nhị phân và tạo một tệp m để tải nó;
    • "mmat"- lưu bản vẽ trong m-file dưới dạng một chuỗi các lệnh tạo bản vẽ. Có thể không hỗ trợ các tính năng đồ họa mới nhất.

Saveas (gcf. "Output", "fig") saveas (gcf, "output", "bmp")

Lệnh hoặc chức năng xóa bỏ xóa một tệp hoặc đối tượng đồ họa.

Tham chiếu thuộc tính đối tượng đồ họa

Các hộp thoại tiêu chuẩn.

Các hàm tạo những hộp thoại

MATLAB định nghĩa 15 chức năng để tạo các hộp thoại tiêu chuẩn. Sự xuất hiện của các hộp thoại có thể được tùy chỉnh bằng cách chỉ định các đối số đầu vào của các hàm này. Dưới đây là ví dụ về các hộp thoại và tên của các chức năng tương ứng với mục đích của chúng.

Hộp thoại tin nhắn:

errordlg - Tạo hộp thoại có thông báo lỗi;

helpdlg - tạo một hộp thoại để hiển thị thông tin;

warndlg - Tạo hộp thoại cảnh báo;

msgbox - tạo một hộp thoại để hiển thị một tin nhắn.

Hộp thoại xác nhận(hàm questdlg)

Hộp thoại để nhập thông tin(hàm inputdlg)

Hộp thoại để lựa chọn từ danh sách(hàm listdlg)

Hộp thoại để thiết lập các tùy chọn in

pagesetupdlg - hiển thị hộp thoại nhiều trang để thiết lập các thông số trang tính và cách in nội dung của cửa sổ đồ họa;

printdlg - hiển thị hộp thoại để chọn các tùy chọn in và cài đặt máy in.

Mở tệp và lưu hộp thoại

uigetfile - hiển thị hộp thoại mở tệp

uiputfile - hiển thị hộp thoại lưu tệp

Hộp thoại lựa chọn thư mục(hàm uigetdir)

Hộp thoại chọn phông chữ(hàm uisetfont)

Hộp thoại chọn màu(chức năng uisetcolor)

Thanh tiến trình(chức năng thanh chờ)

ngoại trừ các chức năng được liệt kê có một chức năng hộp thoại để tạo một cửa sổ đồ họa trống. Các thuộc tính của cửa sổ đồ họa này có thể được thiết lập bằng cách sử dụng các đối số đầu vào cho hàm hộp thoại.

Hãy xem xét việc sử dụng các hộp thoại tiêu chuẩn bằng cách sử dụng ví dụ về cửa sổ mở tệp.

Ứng dụng myview mẫu với hộp thoại mở tệp

Hãy tạo ứng dụng myview với Giao diện đồ họa người dùng, cho phép bạn xem các tệp đồ họa. Cửa sổ ứng dụng đang chạy được hiển thị trong Hình. 1. Nhấn nút Open Image sẽ xuất hiện hộp thoại Select File to Open tiêu chuẩn. Tệp đồ họa đã chọn được hiển thị trong cửa sổ ứng dụng. Nhấp vào nút Đóng Hình ảnh sẽ xóa cửa sổ ứng dụng myview.

Lúa gạo. 1. Cửa sổ ứng dụng myview.

Trong môi trường GUIDE, trên cửa sổ ứng dụng trống, đặt các trục và hai nút như trong Hình 2. Trong trình kiểm tra Thuộc tính, gắn thẻ nút bên trái bằng btnOpen và đặt thuộc tính Chuỗi của nó thành Hình ảnh mở. Tương tự như vậy đối với nút bên phải: tag - btnClose và String - Close Image.

Các trục là cần thiết để hiển thị hình ảnh bằng cách sử dụng chức năng hình ảnh. Chúng tôi sẽ sử dụng một lệnh gọi cấp thấp cho hàm hình ảnh, giả định hướng ngược lại của trục. yđể hình vẽ không bị lộn ngược. Vì vậy, trong trình kiểm tra tài sản thay đổi hướng của trục y bằng cách đặt thuộc tính trục YDir để đảo ngược. Để ẩn đường lưới và đường trục, hãy ẩn các trục bằng cách đặt thuộc tính Hiển thị thành tắt.

Lúa gạo. 2. Chuẩn bị cửa sổ ứng dụng trong môi trường HƯỚNG DẪN.

Lưu ứng dụng dưới dạng myview và lập trình các sự kiện Gọi lại cho các nút Hình ảnh Mở và Hình ảnh Đóng.

Khi người dùng nhấp vào Hình ảnh Mở, hộp thoại mở tệp sẽ xuất hiện và sau khi chọn tệp, hình ảnh sẽ được hiển thị trên các trục. Hãy sử dụng hộp thoại tệp mở tiêu chuẩn được tạo bởi hàm uigetfile. Tham chiếu đơn giản nhất về nó như sau:

Uigetfile

Nếu người dùng đã chọn một tệp và đóng cửa sổ bằng cách nhấp vào nút Mở trong đó, thì đối số đầu ra FileName đầu tiên trả về tên tệp (có phần mở rộng) và PathName thứ hai trả về đường dẫn đến tệp. Nếu người dùng không chọn tệp (nhấp vào Hủy, hoặc đóng cửa sổ bằng nút có dấu gạch chéo trên tiêu đề cửa sổ hoặc nhấp vào ), thì biến FileName sẽ bằng không. Đó là lý do tại sao hành động hơn nữa phụ thuộc vào giá trị FileName.

Nếu tệp đã được chọn, thì bạn nên

1) hình thức Họ và tên tập tin;

3) hiển thị hình ảnh trên trục bằng cách sử dụng chức năng hình ảnh.

Nếu tệp chưa được chọn, thì bạn không cần phải làm gì cả.

Sự kiện Callback của nút Close Image có thể chỉ bao gồm một toán tử - một lệnh gọi đến hàm cla để xóa các trục.

Lập trình các chức năng con của sự kiện Gọi lại của các nút Hình ảnh Mở và Hình ảnh Đóng như sau.

Hàm btnOpen_Callback (hObject, eventdata, handle)% Xử lý sự kiện Callback của nút Open Image% Lấy tên và đường dẫn đến file = uigetfile; % Kiểm tra xem tệp có được chọn không nếu FileName ~ = 0% Tạo đường dẫn đầy đủ đến tệp FullName =; % Đọc ảnh từ tệp đồ họa Pict = imread (FullName); % Xuất hình ảnh trên trục hình ảnh ("CData", Pict) hàm kết thúc btnClose_Callback (hObject, eventdata, handle)% Xử lý sự kiện Gọi lại của nút Close Image% Xóa các trục cla

Khởi động ứng dụng myview. Khi bạn nhấp vào nút Mở Hình ảnh, hộp thoại Chọn tệp để mở sẽ xuất hiện. Tuy nhiên, trường hiển thị nội dung của thư mục hiện tại không hiển thị tệp đồ họa... Điều này là do theo mặc định, bộ lọc tệp (danh sách thả xuống Loại tệp) chứa chuỗi "Tất cả tệp MATLAB" và chỉ các tệp có phần mở rộng được MATLAB chấp nhận mới hiển thị. Tất nhiên, mỗi khi bạn mở một tệp đồ họa, hãy chọn dòng "Tất cả Tệp (*. *)" Từ danh sách Loại tệp thả xuống để hiển thị tất cả các tệp trong thư mục hiện tại. Nhưng tốt hơn nhiều là tạo ngay một hộp thoại mở tệp được định cấu hình để phần mở rộng nhất định... Ví dụ: để hiển thị các tệp có phần mở rộng bmp và jpg, hãy tham khảo hàm uigetfile với đối số đầu vào - một chuỗi trong đó các mẫu có dấu chấm phẩy được viết phần mở rộng mong muốn* .bmp và * .jpg:

Uigetfile ("*. Bmp; *. Jpg");

Thay đổi lệnh gọi uigetfile trong chức năng con btnOpen_Callback ở trên và đảm bảo rằng danh sách thả xuống Loại tệp của hộp thoại mở tệp chỉ chứa hai dòng: "* .bmp; *. Jpg" (mặc định) và "Tất cả tệp (*. *) ”.

Hàm uigetfile cho phép nhiều hơn quản lý linh hoạt cài đặt bộ lọc tệp. Chúng ta sẽ xem xét chúng trong phần dành cho mô tả các chức năng để tạo hộp thoại tiêu chuẩn. Bây giờ chúng ta hãy thảo luận về cách triển khai khả năng chọn nhiều tệp cùng một lúc trong hộp thoại mở tệp tiêu chuẩn.

Chọn nhiều tệp trong hộp thoại tệp đang mở. Trao đổi dữ liệu giữa các chức năng con của một ứng dụng GUI.

Trong phần này, chúng ta sẽ xem xét hai câu hỏi:

1) cách tổ chức lựa chọn nhiều tệp trong cửa sổ tiêu chuẩn mở một tệp và đọc nội dung của chúng vào một mảng phù hợp;

Câu trả lời cho câu hỏi đầu tiên rất đơn giản. Cần gọi hàm uigetfile với một cặp đối số đầu vào bổ sung "MultiSelect" và "on":

Uigetfile (..., "MultiSelect", "on")

Tùy thuộc vào sự lựa chọn của người dùng, các đối số đầu ra sẽ thuộc các loại sau.

  • Nếu người dùng đã chọn nhiều tệp trong hộp thoại mở tệp (bằng cách chọn chuột hoặc bằng cách nhấp và giữ hoặc ), thì FileName sẽ trở thành một mảng ô, mỗi ô trong đó chứa một dòng với tên tệp (và phần mở rộng), và PathName sẽ là một dòng chứa đường dẫn đến các tệp này (đường dẫn đến tất cả các tệp đều giống nhau, do đó PathName không nên là một mảng ô).
  • Nếu người dùng đã chọn một tệp trong hộp thoại mở tệp, thì FileName sẽ là một dòng có tên tệp (có phần mở rộng) và PathName sẽ là một dòng có đường dẫn đến tệp (xem phần trước).
  • Nếu không có lựa chọn nào được thực hiện, thì FileName bằng không.

Câu hỏi thứ hai (giao tiếp giữa các chức năng con xử lý sự kiện) thường phát sinh khi lập trình ứng dụng GUI. Nó được giải quyết như sau. Dữ liệu cần được lưu khi thực hiện một số chức năng con được ghi vào các trường của cấu trúc xử lý. Sau đó, trong cùng một chức năng con, cấu trúc xử lý được lưu bằng cách sử dụng chức năng hướng dẫn:

hướng dẫn (gcbo, tay cầm)

Để lấy dữ liệu trong một chức năng con khác, hãy tham khảo trường tương ứng của cấu trúc tay cầm. Ví dụ, ứng dụng có hai chức năng con btnA_Callback và btnB_Callback. Khi thực thi chức năng con btnA_Callback, mảng số, cần thiết trong hàm con btnB_Callback. Sau đó, các chức năng con này sẽ như sau.

Hàm btnA_Callback (hObject, eventdata, handle). ... ... Xử lý.data =; hướng dẫn (gcbo, tay cầm). ... ... function btnB_Callback (hObject, eventdata, handle). ... ... thanh (handle.data). ... ...

Chúng ta hãy xem xét ứng dụng myview đã tạo trong phần trước và mở rộng khả năng của nó. Ứng dụng được hiện đại hóa sẽ cho phép mở nhiều tệp đồ họa cùng một lúc và xem từng tệp một. Sau khi chọn một số tệp đồ họa trong cửa sổ ứng dụng, chỉ một tệp được hiển thị và nhấp vào nút (chúng ta hãy gọi nó là Tiếp theo) dẫn đến sự xuất hiện của hình ảnh tiếp theo.

Trong môi trường HƯỚNG DẪN, thêm một nút có thẻ btnNext và dòng chữ Bên cạnh mẫu cửa sổ ứng dụng myview (xem Hình 2 của phần trước) (xem Hình 1). Trong trình kiểm tra Thuộc tính, hãy làm cho nó không khả dụng bằng cách đặt thuộc tính Bật thành tắt. Nó sẽ khả dụng trong khi ứng dụng đang chạy nếu người dùng đã chọn một số tệp đồ họa để xem.

Lúa gạo. 1. Cửa sổ ứng dụng Myview với nút Tiếp theo

Bây giờ bạn cần thay đổi chức năng con btnOpen_Callback để xử lý sự kiện Gọi lại của nút Hình ảnh Mở và lập trình sự kiện Gọi lại của nút Tiếp theo. Khi xử lý lựa chọn tệp (hoặc một tệp) của người dùng trong hộp thoại mở tệp, bạn nên tính đến tất cả các khả năng: một số tệp được chọn, chỉ một tệp được chọn, không có tệp nào được chọn.

Nếu một số tệp đồ họa được chọn (tức là mảng Tên tệp là một mảng ô), thì chúng tôi đọc hình ảnh thành một mảng ô và lưu nó trong trường Hình ảnh của cấu trúc tay cầm. Số lượng tệp đồ họa đang mở (tức là độ dài của mảng Tên tệp) sẽ được lưu trong trường ImageNum của cấu trúc tay cầm. Ngoài ra, chúng ta cần số lượng hình ảnh hiện tại, để ghi nhớ chúng ta sẽ tạo trường CurImage của cấu trúc tay cầm.

Sau khi mở tệp, chúng tôi sẽ hiển thị nội dung của tệp đầu tiên trong cửa sổ ứng dụng. Nếu một số tệp đã được mở, thì chúng tôi sẽ cung cấp nút Tiếp theo và nếu chỉ có một tệp, thì chúng tôi sẽ không sử dụng nút Tiếp theo.

Khi xử lý sự kiện Gọi lại của nút Tiếp theo, hãy xóa các trục và hiển thị hình ảnh sau trên chúng. Nếu hình ảnh hiện tại là hình ảnh cuối cùng, thì hình ảnh đầu tiên sẽ được hiển thị.

Dưới đây là văn bản của các hàm con btnOpen_Callback và btnNext_Callback. Chức năng con btnClose_Callback vẫn không thay đổi.

Hàm btnOpen_Callback (hObject, eventdata, handle)% Xử lý sự kiện Gọi lại của nút Open Image% Lấy tên tệp và đường dẫn đến chúng (hoặc một tên tệp và đường dẫn đến nó) = uigetfile ("*. Bmp; *. Jpg", "MultiSelect", "bật"); % Tìm xem có bao nhiêu tệp đã được chọn nếu iscell (FileName)% FileName là một mảng ô, vì vậy một số tệp đã được chọn% ghi vào trường ImageNum của cấu trúc xử lý số lượng tệp đã chọn được xử lý.ImageNum = length (FileName ); % Đối với mỗi tệp trong vòng lặp, hãy tạo tên đầy đủ% và đọc nội dung của nó vào ô thứ k của mảng ô,% được lưu trữ trong trường Pict của cấu trúc xử lý. % đầu tiên chúng ta làm cho mảng trống cho k = 1: handle.ImageNum FullName =; xử lý.Pict (k) = imread (FullName); end% Hình ảnh đầu tiên là hình hiện tại đang xử lý.CurImage = 1; % Chúng tôi hiển thị nó trên hình ảnh các trục ("CData", handle.Pict (má lúm. btnNext, "Enable", "on") else% Chỉ một tệp được chọn hoặc không có tệp nào nếu FileName ~ = 0% Một tệp được chọn, chúng tôi tạo đường dẫn đầy đủđến nó FullName =; % Chúng tôi đọc hình ảnh vào biến Pict (cấu trúc xử lý không cần thiết) Pict = imread (FullName); % Hiển thị hình ảnh trên trục hình ảnh ("CData", Pict)% Đặt nút Tiếp theo không khả dụng (handle.btnNext, "Enable", "off") end end function btnNext_Callback (hObject, eventdata, handle)% Xử lý Callback sự kiện của nút Open Image% Kiểm tra xem hình ảnh nào là hình ảnh hiện tại nếu xử lý.

Ghi chú

Ứng dụng myview có thể được cải thiện hơn nữa, ví dụ: sau khi chọn tệp và trước khi hiển thị tệp đầu tiên, bạn nên xóa các trục. Cũng nên xem xét rằng người dùng đã chọn các tệp không phải đồ họa.

Tham khảo các chức năng để tạo hộp thoại.

Tạo hộp thoại lỗi - errordlg

Hàm errordlg được sử dụng để tạo hộp thoại lỗi chuẩn. Tùy chọn cuộc gọi phổ biến nhất

h = errordlg ("Nội dung thư", "Tiêu đề cửa sổ").

H lưu trữ một con trỏ đến cửa sổ đồ họa được tạo với thông báo lỗi. Ví dụ

h = errordlg ("Phép chia cho không", "Máy tính");

Dẫn đến một cửa sổ như thế này với một con trỏ h:

Cửa sổ vẫn ở trên màn hình cho đến khi nó được đóng bằng nút OK, chìa khóa, nút có dấu gạch chéo trên tiêu đề hoặc sử dụng menu ngữ cảnh của tiêu đề.

Cửa sổ thông báo lỗi không phải là phương thức (nó cho phép bạn điều hướng đến các cửa sổ ứng dụng MATLAB khác). Để làm cho nó trở nên phương thức, sau khi tạo một cửa sổ bằng hàm errordlg, hãy đặt thuộc tính WindowStyle của cửa sổ đồ họa thành "modal": set (h, "WindowStyle", "modal")

Một cách khác để tạo hộp thông báo lỗi phương thức là sử dụng hàm msgbox, được mô tả bên dưới.

Kích thước của cửa sổ được tự động chọn tùy thuộc vào độ dài của các dòng văn bản, các dòng rất dài được bao bọc. Để nhận một thông báo nhiều dòng được chia thành các dòng theo một cách đã chỉ định, bạn phải chỉ định một mảng các chuỗi:

h = errordlg (("Định dạng dữ liệu sai"; "hoặc"; "dữ liệu chưa khớp"), "dlgname")

Tạo liên tiếp các cửa sổ có thông báo lỗi với cùng một tiêu đề:

h = errordlg ("Phép chia cho không", "Máy tính"); ... h = errordlg ("Thao tác sai", "Máy tính");

dẫn đến các cửa sổ khác nhau có thông báo lỗi. Để kích hoạt một cửa sổ (vị trí trên đầu các cửa sổ khác) và hiển thị thông báo mới trong đó, thay vì tạo một cửa sổ mới, hãy gọi errordlg với đối số thứ ba là "on" được cung cấp:

h = errordlg ("Phép chia cho không", "Máy tính"); ... h = errordlg ("Thao tác sai", "Máy tính", "bật"); % kích hoạt cửa sổ cũ

Tất nhiên, nếu cửa sổ cũ bị đóng, thì h = errordlg (..., "on") chỉ tạo một cửa sổ mới.

Sau khi hộp thoại có thông báo lỗi hiển thị, ứng dụng tiếp tục chạy. Câu hỏi thường đặt ra: làm thế nào để tạm dừng thực thi cho đến khi hộp thoại được đóng lại. Điều này được thực hiện bằng cách sử dụng hàm waitfor, hàm này sẽ tạm dừng việc thực thi ứng dụng cho đến khi một đối tượng đồ họa cụ thể bị loại bỏ. Một con trỏ đến đối tượng này (trong trường hợp của chúng tôi là cửa sổ thông báo lỗi) được chỉ định làm đối số đầu vào cho hàm waitfor:

h = errordlg ("Phép chia cho không", "Máy tính"); set (h, "WindowStyle", "modal") waitfor (h) a = 1; ....

Tạo hộp thoại cảnh báo - warndlg

Hàm warndlg hoạt động theo cách giống như hàm errordlg (xem ở trên), nhưng không có tùy chọn nào để gọi nó với đối số đầu vào thứ ba là "on". Ví dụ,

dẫn đến một cửa sổ như vậy với con trỏ h

Cửa sổ cảnh báo chỉ khác với cửa sổ thông báo lỗi bởi biểu tượng:

Việc gọi lại warndlg với cùng các đối số đầu vào sẽ tạo ra một cửa sổ mới, ngay cả khi cửa sổ cũ chưa được đóng.

Tạo hộp thoại trợ giúp - helpdlg

Hàm helpdlg hoạt động giống như hàm warndlg (xem ở trên). Ví dụ,

h = warndlg ("Tệp đã lỗi thời", "Bộ xử lý trước")

kết quả trong một cửa sổ như thế này với con trỏ h:

chỉ khác với cửa sổ cảnh báo bởi hình ảnh:

Gọi lại helpdlg với cùng tiêu đề cửa sổ sẽ kích hoạt cửa sổ cũ nếu nó chưa được đóng. Nếu nó đã bị đóng, thì một cái mới sẽ được tạo.

Nhiều dòng văn bản thông báo, chế độ cửa sổ và tạm ngừng thực thi ứng dụng cho đến khi cửa sổ đóng lại đều được thực hiện theo cách tương tự như khi gọi errordlg.

Tạo hộp thư - hàm msgbox chung

Chức năng msgbox cho phép bạn tạo các cửa sổ lỗi, cảnh báo và trợ giúp được thảo luận ở trên. Để nhận văn bản nhiều dòng, bạn phải chỉ định một mảng ô chuỗi làm đối số đầu tiên. Ngoài ra, có thể tạo cửa sổ với biểu tượng tùy ý. Kiểm soát chế độ của cửa sổ và tạo một cửa sổ mới có cùng tiêu đề được thực hiện bằng cách sử dụng các đối số đầu vào msgbox. Hàm msgbox trả về một con trỏ đến cửa sổ mà nó tạo ra.

h = msgbox ("Lỗi rất nghiêm trọng!", "Chương trình", "lỗi")- tạo một cửa sổ có thông báo lỗi và biểu tượng tiêu chuẩn (tương tự như errordlg).

c = ("Lỗi rất nghiêm trọng!"; "Đừng nói với ai"); h = msgbox (c, "Chương trình", "lỗi")- tương tự như phần trước, nhưng thông báo gồm hai dòng.

h = msgbox ("Cảnh báo cuối cùng!", "Chương trình", "Cảnh báo")- tạo một cửa sổ với cảnh báo và biểu tượng tiêu chuẩn (tương tự như warndlg).

h = msgbox ("Tự giúp mình ...", "Chương trình", "trợ giúp")- tạo một cửa sổ với thông tin trợ giúp và một biểu tượng tiêu chuẩn (tương tự như helpdlg).

h = msgbox ("Đây không phải là hình ảnh", "Chương trình", "không có")- Tạo một cửa sổ với thông tin văn bản mà không có biểu tượng.

h = msgbox ("Nội dung tin nhắn", "Tiêu đề cửa sổ", "tùy chỉnh", hình ảnh, bản đồ màu)- tạo một cửa sổ có biểu tượng người dùng, ví dụ:

= imread ("phone.gif"); % đọc ảnh và bản đồ màu từ tệp h = msgbox ("Ai đó đang gọi cho bạn", "Điện thoại", "tùy chỉnh", ảnh, bản đồ)

kết quả trong một cửa sổ như thế này

Đối số đầu vào cuối cùng ("phương thức", "không phương thức" hoặc "thay thế") kiểm soát giao diện của cửa sổ và cách một cửa sổ mới có cùng tiêu đề được hiển thị. Nếu phương thức hiển thị một cửa sổ mới không được chỉ định, thì một cửa sổ mới sẽ luôn được tạo.

Ví dụ:

h = msgbox ("Lỗi rất nghiêm trọng!", "Chương trình", "phương thức")- hiển thị một cửa sổ tiêu chuẩn phương thức với một thông báo lỗi

h = msgbox ("Ai đó đang gọi cho bạn", "Điện thoại", "tùy chỉnh", ảnh, bản đồ, "phương thức")- hiển thị một cửa sổ phương thức với một hình ảnh nhất định cho hình ảnh và bản đồ màu.

h = msgbox ("Lỗi rất nghiêm trọng!", "Chương trình", "lỗi", "thay thế")- Thay thế cửa sổ trước đó bằng Chương trình tiêu đề, nếu không có, hãy tạo một cửa sổ mới. Khi thực hiện các lệnh

h = msgbox ("Lỗi rất nghiêm trọng!", "Chương trình", "lỗi") h = msgbox ("Có gì đó lạ", "Chương trình", "cảnh báo", "thay thế")

cửa sổ thứ hai sẽ thay thế cửa sổ đầu tiên.

Hộp thoại xác nhận - hàm questdlg

Hàm questdlg tạo một hộp thoại xác nhận phương thức với nhiều nút. Khi tạo một cửa sổ, bất kỳ nút nào trong số các nút đều có thể có tiêu điểm. Trong đối số đầu ra, hàm questdlg trả về lựa chọn của người dùng (một chuỗi có tên của nút được nhấn) hoặc một chuỗi trống nếu cửa sổ được đóng mà không nhấp vào bất kỳ nút nào. Để nhận văn bản nhiều dòng, hãy sử dụng một mảng ô gồm các chuỗi. Nếu một dòng dài được chỉ định, thì nó sẽ tự động được quấn.

Ví dụ:

button = questdlg ("Bạn có chắc không?")- tạo một cửa sổ xác nhận tiêu chuẩn với các nút Có, Không, Hủy. Nút có trong tiêu điểm (mặc định).

button = questdlg ("Bạn có chắc không?", "Chương trình")- tạo một cửa sổ xác nhận tiêu chuẩn với tiêu đề và các nút Có, Không, Hủy.

button = questdlg ("Bạn có chắc không?", "Chương trình", "Không")- tạo một cửa sổ xác nhận tiêu chuẩn với tiêu đề và các nút Có, Không, Hủy. Tiêu điểm nằm ở nút Không.

button = questdlg ("Bạn có chắc không?", "Chương trình", "Có", "Có thể", "Có thể")- tạo một cửa sổ xác nhận tiêu chuẩn với tiêu đề và hai nút Có và Có thể. Tiêu điểm nằm ở nút Có thể.

button = questdlg ("Bạn có chắc không?", "Chương trình", "Có", "Không", "Tôi không" "không biết", "Không")- tạo một cửa sổ xác nhận tiêu chuẩn với tiêu đề và ba nút Có, Không và tôi không biết. Trọng tâm là nút Không.

Hộp thoại để nhập thông tin (hàm inputdlg)

Hàm inputdlg tạo một hộp thoại với một số dòng đầu vào được chỉ định. Số lượng dòng đầu vào và tiêu đề của chúng được xác định bằng cách sử dụng các đối số đầu vào. Cửa sổ chứa các nút OK và Cancel. Nếu người dùng bấm OK, thì đối số đầu ra của hàm inputdlg là một mảng ô với thông tin do người dùng nhập vào các dòng đầu vào. Nếu cửa sổ được đóng bằng cách nhấp vào nút Hủy hoặc theo bất kỳ cách nào khác (ngoại trừ nút OK), thì đối số đầu ra là một mảng ô trống.

Ví dụ:

M = inputdlg (("THỜI GIAN" "GIÁ TRỊ"))- tạo một hộp thoại

Ví dụ: trong dòng TIME người dùng nhập 0,1 0,3 0,55 4,5 và trong dòng GIÁ TRỊ - 2,3 9,55 2,1 0,7 và nhấp vào OK, thì mảng ô M sẽ có các giá trị sau.

M = "0,1 0,3 0,55 4,5" "-2,3 9,55 2,1 0,7"

Bạn có thể sử dụng str2num để chuyển đổi chúng thành vectơ số:

time = str2num (M (1)) val = str2num (M (2))

M = inputdlg (("TIME" "VALUES"), "Dữ liệu Đầu vào") - tạo một hộp thoại có tiêu đề Dữ liệu Đầu vào.

Để có thể nhập văn bản nhiều dòng, bạn phải chỉ định đối số đầu vào thứ ba - số dòng trong mỗi vùng nhập:

M = inputdlg (("ma trận A" "Ma trận B"), "Dữ liệu đầu vào", 3)- nếu đối số thứ ba là một số lớn hơn một, thì tất cả các vùng đầu vào có cùng chiều cao và có thanh cuộn.

Nếu quá trình nhập được hoàn tất bằng cách nhấp vào nút OK, thì mỗi ô của mảng M chứa một mảng ký tự. Mảng ký tự chứa bao nhiêu dòng được nhập vào vùng nhập tương ứng.

M = inputdlg (("vectơ A" "Ma trận B"), "Dữ liệu đầu vào",)- để đặt riêng chiều cao của các vùng đầu vào, bạn nên chỉ định số dòng của mỗi vùng đầu vào trong vectơ cột làm đối số đầu vào thứ ba:

M = inputdlg (("vectơ A" "Ma trận B"), "Dữ liệu đầu vào",)- để đặt độ dài của các vùng nhập bằng ký tự (trong trường hợp này là 100 ký tự), đối số đầu vào thứ ba phải là ma trận:

M = inputdlg (("Tên" "Năm"), "Thông tin", (char ("John", "Smith") "1990"))- để có được một cửa sổ với các trường đã điền (để nhắc định dạng đầu vào cho người dùng), hãy chỉ định đối số đầu vào thứ tư. Nó phải là một mảng ô có cùng kích thước với đối số đầu vào đầu tiên:

M = inputdlg (("Tên" "Năm"), "Thông tin", (char ("John", "Smith") "1990"), "trên")- đối số đầu vào thứ năm cuối cùng "on" có nghĩa là người dùng có thể thay đổi kích thước hộp thoại.

Hộp thoại để chọn từ một danh sách - hàm listdlg

Hàm listdlg tạo một hộp thoại với hộp danh sách từ các chuỗi và nút được chỉ định để lựa chọn và bỏ chọn. Các dòng danh sách được xác định bởi một mảng ô. Nhiều lựa chọn các mục trong danh sách được hỗ trợ. Các thông số sau được trả về trong các đối số đầu ra: Lựa chọn - một số hoặc vectơ có số dòng được chọn và ok - thông tin về việc lựa chọn đã hoàn tất bằng cách nhấn nút OK (ok = 1) hay cửa sổ đã được đóng trong một cửa sổ khác cách (ok = 0). Nếu ok = 0, thì Vùng chọn là một mảng trống. Theo mặc định, một số mục trong danh sách có thể được chọn (bằng cách nhấp bằng chuột trong khi giữ Ctrl) và có nút Chọn Tất cả để chọn tất cả các mục.

= listdlg ("ListString", ("Tuyến tính"; "Bậc hai"; "Khối lập thể"))- tạo một hộp thoại lựa chọn với danh sách ba dòng: Tuyến tính, bậc hai, hình khối. Nếu người dùng đã chọn, ví dụ: bậc hai và nhấn nút OK, thì Lựa chọn = 2 và ok = 1. Nếu người dùng đã chọn Tuyến tính và Hình khối và nhấn nút OK, thì Lựa chọn = và ok = 1, v.v.

Hàm listdlg có thể được truy cập ở dạng chung:

= listdlg ("ListString", mảng ô của chuỗi, param1, val1, param2, val2, ...)

Các tham số và giá trị có thể có của chúng như sau:

  • "SelectionMode" - chế độ chọn hàng trong danh sách, giá trị: "đơn" (chỉ chọn một hàng) hoặc "nhiều" (theo mặc định, để chọn nhiều hàng);
  • "ListSize" - kích thước của vùng danh sách tính bằng pixel, giá trị được đặt bởi vector [width-height] (theo mặc định);
  • "InitialValue" - lựa chọn ban đầu của các dòng, giá trị là một vectơ có số dòng sẽ được chọn khi hộp danh sách được hiển thị (theo mặc định là 1);
  • "Tên" - tiêu đề của cửa sổ, giá trị được đặt bởi một chuỗi (theo mặc định, một chuỗi rỗng);
  • "PromptString" - văn bản phía trên danh sách, giá trị: chuỗi hoặc mảng chuỗi hoặc ô từ chuỗi (đối với văn bản nhiều dòng). Mặc định là một mảng ô trống.
  • "OKString" - một dòng chữ trên nút để chọn và đóng cửa sổ, giá trị là một chuỗi (theo mặc định là "OK");
  • "CancelString" - một dòng chữ trên nút để đóng cửa sổ mà không cần lựa chọn, giá trị là một chuỗi (theo mặc định là "Cancel");
  • "uh" - chiều cao của các nút cửa sổ, giá trị được đặt bằng pixel (18 theo mặc định);
  • "fus" - khoảng cách giữa các nút và danh sách, giá trị được đặt theo pixel (18 theo mặc định);
  • "ffs" là khoảng cách từ viền cửa sổ đến danh sách, giá trị được đặt bằng pixel (mặc định là 8).
Ví dụ, lệnh

= listdlg ("ListString", ("Linear"; "Quadratic"; "Cubic"), ... "Name", "Approximation", "ListSize" ,, "PromptString", "Select method", "fus", 5)

kết quả trong hộp thoại hộp tổ hợp sau được tạo:

Hộp thoại để thiết lập các thông số trang tính và cách nội dung của cửa sổ đồ họa được in - hàm pagesetupdlg

pagesetupdlg - gọi hộp thoại Thiết lập Trang cho cửa sổ đồ họa hiện tại (nếu không có cửa sổ này, một cửa sổ mới sẽ được tạo).

pagesetupdlg (hF) - Gọi hộp thoại Thiết lập Trang cho cửa sổ đồ họa với con trỏ hF.

Các cài đặt được thực hiện trong hộp thoại Thiết lập Trang ảnh hưởng đến các thuộc tính tương ứng của cửa sổ đồ họa: PaperSize, PaperType, PaperPozition, v.v.

Hàm pagesetupdlg cho phép bạn định cấu hình các thông số của chỉ một cửa sổ đồ họa, tức là hF không thể là một vectơ của con trỏ. Để cấu hình đồng thời các tham số chính của một số cửa sổ đồ họa, hãy sử dụng hàm pagedlg, đối số đầu vào của hàm này có thể là một vectơ con trỏ đến các cửa sổ đồ họa.

Cửa sổ Thiết lập Trang là phương thức; việc thực thi ứng dụng bị tạm dừng cho đến khi cửa sổ đóng lại.

Hộp thoại để chọn các tùy chọn in và thiết lập máy in - printdlg function

printdlg - gọi hộp thoại Windows chuẩn để in cửa sổ đồ họa hiện tại (nếu không có cửa sổ này, một cửa sổ mới sẽ được tạo).

printdlg (hF) - gọi hộp thoại Windows tiêu chuẩn để in cửa sổ đồ họa với con trỏ hF.

printdlg ("- crossplatform", hF) - Gọi hộp thoại MATLAB Print để in cửa sổ đồ họa với con trỏ hF.

Hộp thoại in là phương thức, ứng dụng bị tạm dừng cho đến khi cửa sổ được đóng lại.

Hộp thoại mở tệp - chức năng uigetfile

= uigetfile- Hiển thị hộp thoại để mở tệp có nội dung của thư mục hiện tại. Bộ lọc tệp được đặt thành TẤT CẢ tệp MATLAB, điều này khiến chỉ các tệp có phần mở rộng mà MATLAB hỗ trợ được hiển thị. Trong danh sách thả xuống Loại tệp, bạn có thể chọn chỉ M-tệp hoặc chỉ cửa sổ đồ họa, v.v. hoặc tất cả các tệp.

Nếu người dùng đã chọn một tệp (bằng cách nhấp vào biểu tượng tệp và nhấn nút Mở, hoặc bằng cách nhấp đúp vào biểu tượng tệp hoặc nhập tên tệp vào dòng Tên tệp và nhấn nút Mở), thì FName chứa một dòng với tên tệp và phần mở rộng, và PName là đường dẫn đến tệp. Nếu người dùng không chọn tệp và đóng cửa sổ, thì FName = 0 và PName = 0. Sau khi gọi hàm uigetfile, hãy kiểm tra xem tệp đã được chọn hay chưa. Nếu vậy, hãy nối các dòng này để có tên tệp đầy đủ:

= uigetfile; if ~ isequal (FName, 0) FullName = strcat (PName, FName); % đọc thêm dữ liệu từ cuối tệp

Bộ lọc tệpđược chỉ định trong đối số đầu vào đầu tiên của hàm uigetfile, chẳng hạn

= uigetfile ("*. txt");

tạo một hộp thoại mở tệp có danh sách Loại tệp chứa hai chuỗi: "* .txt" và "Tất cả tệp (*. *)". Bạn có thể chỉ định nhiều phần mở rộng, nhưng sau đó bạn cần sử dụng một mảng ô từ các chuỗi:

= uigetfile (("*. txt"; "* .dat"));

Để đặt mô tả về loại tệp trong danh sách Loại tệp, bạn phải chỉ định một mảng ô gồm hai cột. Mỗi dòng chứa phần mở rộng tệp và mô tả (trong khi dòng "Tất cả tệp (*. *)" Không được thêm vào danh sách Loại tệp của hộp thoại mở tệp):

Bộ lọc = ("*. Txt", "Tệp văn bản (* .txt)"; "* .dat", "Tệp dữ liệu (* .dat)"; "* .res", "Kết quả (* .res)") ; = uigetfile (Bộ lọc);

Là một bộ lọc, cũng có thể có một chuỗi có tên tệp, sau đó chuỗi này nằm trong dòng Tên tệp khi hộp thoại mở tệp xuất hiện và phần mở rộng của nó được coi là phần mở rộng mặc định và xuất hiện trong danh sách Loại tệp cùng với "Tất cả các tệp (*. *)".

Nếu bạn cần tìm loại tệp mà người dùng đã chọn trong danh sách Loại tệp, thì bạn nên tham khảo uigetfile với ba đối số đầu ra:

= uigetfile (Bộ lọc);

FilterIndex ghi lại số loại tệp.

Đối với nhiệm vụ tiêu đề cửa sổ riêng mở tệp (thay vì Chọn tệp để mở), hàm uigetfile được gọi với đối số đầu vào thứ hai:

= uigetfile (Bộ lọc, "Mở tệp");

Và để đặt tên tệp đã chỉ định trong dòng Tên tệp khi tạo cửa sổ mở tệp, bạn phải chỉ định tên tệp đó trong đối số đầu vào thứ ba (tên tệp có thể là đầy đủ):

= uigetfile (Bộ lọc, "Mở tệp", "input.txt")

Đây là cách bạn có thể hiển thị nội dung của bất kỳ thư mục nào, chẳng hạn như thư mục gốc của ổ đĩa D:

= uigetfile (Bộ lọc, "Mở tệp", "d: \")

Ghi chú
Nếu chúng ta muốn mở tệp MATLAB như uigetfile mặc định gợi ý, nhưng đặt tiêu đề cửa sổ của riêng chúng ta (và thư mục hoặc tệp mặc định trong hộp thoại mở tệp), thì không thể bỏ qua đối số đầu vào đầu tiên, bộ lọc. Nó phải là một dòng trống:

= uigetfile ("", "Mở tệp", "d: \");

Để người dùng chọn nhiều tệp, bạn nên gọi uigetfile theo một trong những cách sau:

= uigetfile ("MultiSelect", "on"); hoặc = uigetfile ("*. dat", "MultiSelect", "on"); hoặc = uigetfile ("*. dat", "Open File", "d: \", "MultiSelect", "on")

Nếu người dùng đã chọn nhiều tệp trong hộp thoại, thì đối số đầu ra FName là một mảng ô gồm tên của các tệp đã chọn (PName, tất nhiên, vẫn là một chuỗi, vì các tệp được chọn trong cùng một thư mục). Để có được một mảng ô có tên tệp đầy đủ, mã sau là phù hợp (hàm strcat có thể nối một chuỗi với một mảng ô từ chuỗi):

= uigetfile ("MultiSelect", "on"); if ~ isequal (FName, 0) FullName = strcat (PName, FName); kết thúc

MATLAB có chức năng mở các tệp có định dạng khác nhau

Vì chúng ta đang nói về cách mở tệp, nên trích dẫn các chức năng chính của MATLAB được thiết kế để hoạt động với các tệp có định dạng khác nhau.

trọng tải- đọc dữ liệu từ tệp nhị phân hoặc tệp văn bản.

mở ra- mở một tập tin. Phương thức mở phụ thuộc vào phần mở rộng:

  • gia hạn NS- tệp được mở trong trình chỉnh sửa tệp M;
  • gia hạn mdl- mô hình được mở trong Simulink;
  • gia hạn chiếu- ghi dữ liệu nhị phân từ tệp vào các trường cấu trúc, tên của các trường cấu trúc trùng với tên của các biến được ghi trong tệp;
  • gia hạn quả sung- một cửa sổ đồ họa mở ra;
  • gia hạn P- nếu có một tệp m có cùng tên, thì nó sẽ được mở trong trình chỉnh sửa tệp M;
  • mở rộng htm, html- tệp mở trong cửa sổ trình duyệt của hệ thống trợ giúp MATLAB;
  • gia hạn pdf- tệp mở trong Adobe Acrobat (yêu cầu cài đặt mở bằng liên kết trong Windows);
Để mở tệp có phần mở rộng không chuẩn, bạn có thể viết hàm của riêng mình mà hàm này sẽ được gọi theo mặc định. Tên của nó được hình thành từ từ mở và phần mở rộng, ví dụ, để mở tệp có phần mở rộng dtm, hãy viết hàm opendtm. Thí dụ. Giả sử bạn cần mở tệp nhị phân với phần mở rộng dtm, chứa giá trị của hai biến, tên của chúng có thể khác nhau. Giá trị của các biến này phải được ghi vào biến thời gian và dữ liệu của môi trường làm việc. Sau đó, chúng tôi viết hàm tệp opendtm:

function opendtm (fname)% đọc dữ liệu vào cấu trúc S = load ("- mat", fname); % tìm hiểu tên của các trường cấu trúc (tên biến) F = fieldnames (S); % Gán các giá trị cho thời gian và các biến dữ liệu của bàn làm việc gán ("cơ sở", "thời gian", S. (F (1))) gán giá trị ("cơ sở", "dữ liệu", S. (F (2)) ))

Đây là cách bạn có thể sử dụng hàm opendtm:

A = 1:10; B = sqrt (A); save ("my.dtm", "A", "B")% ghi A và B vào một tệp ở dạng nhị phân mở ("my.dtm")% lệnh gọi mở opendtm và thời gian và dữ liệu được tạo trong môi trường sản xuất

Ghi chú. Hàm uiopen kết hợp các khả năng của uigetfile và open - nó tạo ra một hộp thoại mở tệp và sau đó gọi open để mở nó.

winopen - mở tệp trong Windows với ứng dụng được liên kết với phần mở rộng này, ví dụ: winopen ("art.doc") - mở art.doc trong MS Word; winopen ("my.txt") - mở my.txt trong notepad; winopen ("all.htm") - mở all.htm trong trình duyệt web.

sổ tay- mở hoặc tạo M-book trong MS Word.

công bố- thực thi M-file, chia thành các ô và lưu kết quả ở định dạng được chỉ định: html, doc, ppt, xml, rpt, latex.

dos và hệ thống- thực thi các lệnh (xem thêm!), khởi chạy các tệp thực thi, ví dụ:

hệ thống ("calc")- khởi chạy máy tính.

uiimport- mở cửa sổ Trình hướng dẫn nhập để nhập dữ liệu từ các định dạng khác nhau.

importdata- nhập dữ liệu tùy thuộc vào phần mở rộng của tệp, cũng hữu ích để đọc dữ liệu từ tệp văn bản được phân tách.

csvread- đọc dữ liệu số từ tệp văn bản được phân tách bằng dấu phẩy.

dlmread- đọc dữ liệu số từ tệp văn bản với dấu phân cách được chỉ định.

textread, textcan- đọc dữ liệu từ một tệp văn bản với một định dạng cụ thể.

xlsread- đọc dữ liệu từ các tệp MS Excel.

wavread- đọc tệp wav âm thanh.

aviread- đọc một tập tin avi.

im lặng- đọc các tệp đồ họa.

Ngoài các chức năng được liệt kê, có các chức năng cấp thấp để làm việc với tệp. Tên của họ bắt đầu bằng chữ f:

fclose- đóng tập tin.

giả vờ- kiểm tra xem có đến cuối tệp hay không.

sự cuồng nhiệt- nhận thông tin về lỗi cuối cùng trong quá trình nhập-xuất.

lải nhải- đọc một dòng từ tệp văn bản mà không có ký tự kết thúc dòng.

đồ ăn vặt- đọc một dòng từ tệp văn bản với ký tự cuối dòng.

fopen- mở một tập tin.

fprintf- định dạng ghi thành một tập tin.

bánh mì- đọc từ một tệp nhị phân.

tự do- đi đến phần đầu của tệp.

fscanf- định dạng đọc từ một tệp.

fseek- chuyển đổi đến một vị trí nhất định trong tệp.

ftell- nhận được vị trí hiện tại trong tệp.

fwrite- ghi vào tệp nhị phân.

Tất cả các chức năng để đọc dữ liệu được liệt kê trong chủ đề trợ giúp: MATLAB: Functions - Categorical List: File I / O.

Hộp thoại Lưu tệp - Hàm uiputfile

Việc sử dụng uiputfile tương tự như uigetfile đã thảo luận ở trên. Tương tự như vậy, bạn có thể đặt bộ lọc tiện ích mở rộng, tiêu đề cửa sổ, tệp hoặc đường dẫn mặc định. Sự khác biệt là không có tùy chọn "MultiSelect" trong uiputfile (nó không cần thiết khi lưu). Ngoài ra, nếu người dùng chọn tên tệp hiện có trong hộp thoại lưu tệp, cửa sổ xác nhận sẽ xuất hiện. Chọn Có sẽ kết thúc hộp thoại lưu tệp và Không quay lại cửa sổ lưu tệp. Kiểm tra hoạt động của người dùng và lấy tên tệp đầy đủ giống hệt như đối với uigetfile.

Các chức năng của MATLAB để lưu dữ liệu vào tệp

Hãy liệt kê các chức năng MATLAB chính được thiết kế để lưu dữ liệu thuộc nhiều loại khác nhau.

cứu- lưu dữ liệu trong các tệp văn bản và tệp nhị phân

Ghi chú.
Hàm uisave kết hợp các khả năng của uigetfile và save - nó tạo ra một hộp thoại lưu tệp sẽ lưu tất cả các biến môi trường.

csvwrite- ghi dữ liệu số vào tệp văn bản được phân tách bằng dấu phẩy.

dlmwrite- ghi dữ liệu số vào một tệp văn bản thông qua một dấu phân cách được chỉ định.

xlswrite- ghi dữ liệu ở định dạng MS Excel.

wavwrite- ghi một tập tin wav.

avifile- tạo một tệp avi và trả về một số nhận dạng cho nó, được sử dụng trong các chức năng khác: addframe, close.

phim2avi- tạo tệp avi từ ma trận, mỗi cột lưu trữ thông tin về một khung hình (xem các chức năng: movie, getframe, im2frame).

imwrite- viết một tập tin đồ họa.

Ngoài các hàm được liệt kê, có các hàm cấp thấp để làm việc với các tệp có tên bắt đầu bằng chữ f (xem phần "Các Hàm MATLAB để Mở Các Định dạng Tệp Khác nhau" ở trên).

Hộp thoại lựa chọn thư mục - hàm uigetdir

Hàm uigetdir mở hộp thoại Duyệt tìm thư mục và trả về đường dẫn đến thư mục đã chọn hoặc bằng 0 nếu người dùng chưa thực hiện lựa chọn. Việc kiểm tra xem một thư mục đã được chọn hay chưa được thực hiện theo cách tương tự như trong hàm uigetfile cho hộp thoại mở tệp. Các cách gọi uigetdir:

dname = uigetdir- mở hộp thoại lựa chọn thư mục, trong đó thư mục MATLAB hiện tại được tô sáng.

dname = uigetdir ("startpath")- mở một hộp thoại để chọn một thư mục, trong đó thư mục được chỉ định được chọn, ví dụ: dname = uigetdir ("c: \").

dname = uigetdir ("startpath", "text")- Mở hộp thoại để chọn thư mục, trong đó thư mục được chỉ định được chọn và đặt văn bản đã chỉ định phía trên cửa sổ với cấu trúc thư mục phân cấp. Nếu bạn muốn mở hộp thoại chọn thư mục, trong đó thư mục MATLAB hiện tại được tô sáng, bạn phải chỉ định một chuỗi trống thay vì đối số đầu vào đầu tiên: dname = uigetdir ("", "text").

Các chức năng của thư mục MATLAB

Các hành động khác sau khi người dùng chọn tên thư mục giả sử việc sử dụng các hàm MATLAB được thiết kế để làm việc với các thư mục.

đĩa CD- thay đổi thư mục MATLAB hiện tại

dir- hiển thị nội dung của thư mục trong cửa sổ lệnh hoặc ghi thông tin về nội dung vào một mảng cấu trúc.

đường dẫn, rmpath- Quản lý đường dẫn tìm kiếm MATLAB.

Ghi chú.
Hàm pathtool hiển thị một hộp thoại Set Path đặc biệt để quản lý các đường dẫn tìm kiếm MATLAB.
Chức năng trình duyệt tệp hiển thị một hộp thoại Thư mục Hiện tại đặc biệt với nội dung của thư mục hiện tại, khả năng chọn thư mục hiện tại mới và mở tệp trong MATLAB.

Tất cả các chức năng để làm việc với thư mục trong MATLAB được liệt kê trong hệ thống trợ giúp trong MATLAB: Chức năng - Danh sách phân loại: Công cụ máy tính để bàn và Môi trường phát triển: Không gian làm việc, Đường dẫn tìm kiếm và Thao tác tệp.

Hộp thoại Lựa chọn Phông chữ - Hàm uisetfont

Hàm uisetfont có thể được sử dụng cho hai mục đích:
1) tạo hộp thoại để chọn phông chữ và ghi lại thông tin về phông chữ đã chọn (tên, kích thước, kiểu) trong cấu trúc;
2) tạo hộp thoại để chọn phông chữ và thay đổi đối tượng văn bản, nhãn trục hoặc điều khiển phù hợp với cài đặt được thực hiện trong cửa sổ này.

S = uisetfont- dẫn đến sự xuất hiện của một hộp thoại để chọn một phông chữ và, nếu một lựa chọn được thực hiện trong đó, thì cấu trúc S sẽ được trả về, các trường trong đó có ý nghĩa sau:

S.FontName - chuỗi với tên của phông chữ; S.FontUnits - đơn vị đo lường ("điểm"); S.FontSize - kích thước; S.FontWeight - độ đậm ("bình thường" hoặc "đậm"); S.FontAngle - kiểu chữ ("bình thường" hoặc "nghiêng").

Nếu người dùng không chọn phông chữ và đóng cửa sổ, thì S bằng không.

S = uisetfont (S0)- dẫn đến sự xuất hiện của hộp thoại chọn phông chữ, trong đó phông chữ mặc định được chọn phù hợp với các giá trị của các trường của cấu trúc S0, ví dụ:

S0.FontName = "Arial"; S0.FontUnits = "điểm"; S0.FontSize = 20; S0.FontWeight = "bold"; S0.FontAngle = "bình thường"; S = uisetfont (S0)

S = uisetfont ("Tiêu đề cửa sổ") hoặc S = uisetfont (S0, "Tiêu đề cửa sổ")- Giống như các tùy chọn trước, chỉ có cửa sổ chọn phông chữ có tiêu đề cho sẵn.

uisetfont (h)- gọi hộp thoại để chọn phông chữ cho đối tượng văn bản, các trục hoặc điều khiển bằng con trỏ h.

uisetfont (h, "Tiêu đề cửa sổ")- giống như uisetfont (h), chỉ có cửa sổ chọn phông chữ có tiêu đề cho trước.

S = uisetfont (h), S = uisetfont (h, "Tiêu đề cửa sổ")- giống như hai tùy chọn trước, chỉ có thông tin về lựa chọn của người dùng được trả về bổ sung trong cấu trúc S.

Một ví dụ về việc thay đổi phông chữ của các đối tượng đồ họa

hA = trục; % tạo biểu đồ trục (rand (10))% vẽ biểu đồ hT = title ("Đồ thị ngẫu nhiên")% thêm tiêu đề% mở hộp thoại chọn phông chữ để đánh dấu trục uisetfont (hA, "Đặt phông chữ cho trục"); % mở hộp thoại để chọn phông chữ cho tiêu đề uisetfont (hT, "Đặt phông chữ cho tiêu đề"); Hộp thoại chọn màu - chức năng uisetcolor

Hàm uisetcolor, giống như uisetfont, có thể được sử dụng cho hai mục đích:
1) tạo hộp thoại chọn màu và ghi màu đã chọn vào vector ở định dạng RGB;
2) tạo hộp thoại chọn màu và thay đổi các đối tượng đồ họa có thuộc tính Màu phù hợp với cài đặt được thực hiện trong cửa sổ này.

C = uisetcolor- tạo hộp thoại chọn màu (theo mặc định, màu hiện tại là màu trắng) và ghi màu đã chọn vào vector C ở định dạng RGB. Nếu người dùng chưa lựa chọn, thì C bằng không.

C = uisetcolor (C0)- giống như tùy chọn trước, chỉ trong hộp thoại chọn màu, màu hiện tại được chỉ định bởi vectơ C0 trong RGB. Nếu người dùng chưa lựa chọn, thì C giống với C0.

С = uisetcolor ("Tiêu đề cửa sổ"), С = uisetcolor (С0, "Tiêu đề cửa sổ")- giống như tùy chọn trước, chỉ có hộp thoại chọn màu có tiêu đề cho sẵn.

uisetcolor (h)- mở hộp thoại chọn màu để chỉ định màu của đối tượng đồ họa bằng con trỏ h (đối tượng đồ họa phải có thuộc tính Màu).

uisetcolor (h, "Tiêu đề cửa sổ")- Tương tự như trước, nhưng hộp thoại có tiêu đề cho sẵn.

C = uisetcolor (h) hoặc C = uisetcolor (h, "Tiêu đề cửa sổ")- giống như hai phương pháp cuối cùng. Ngoài việc thay đổi màu của đối tượng, màu được chọn được ghi vào vector C ở định dạng RGB.

Một ví dụ về việc thay đổi màu sắc của các đối tượng đồ họa.

hA = trục; % tạo trục% vẽ biểu đồ x = 0: 0,1: 10; y = sin (x); hL = plot (x, y) hT = title ("Random Graph")% add a title uisetcolor màu (hT, "Chọn màu tiêu đề")% mở hộp thoại để chọn màu của trục uisetcolor (hA, "Chọn màu trục")

Cửa sổ có thanh tiến trình - chức năng của thanh chờ

Chức năng thanh chờ tạo một cửa sổ có thanh tiến trình và cho phép bạn cập nhật nó.

h = thanh chờ (x, "văn bản")- hiển thị một cửa sổ với thanh tiến trình và văn bản được chỉ định phía trên thanh. Chiều dài của thanh tiến trình tỷ lệ với giá trị x, giá trị này phải nằm trong khoảng từ 0 đến 1. Đối số đầu ra h là một con trỏ đến cửa sổ đồ họa có thanh tiến trình.

thanh chờ (x, h)- tăng chiều dài của thanh tiến trình với con trỏ h theo giá trị của x.

% tạo một cửa sổ với thanh tiến trình trống h = waitbar (0, "Giải quyết vấn đề giá trị riêng ..."); cho i = 1: 100 A = rand (30); L = eig (A); thanh chờ (i / 100)% cập nhật thanh tiến trình end% xóa cửa sổ đồ họa khi đóng thanh tiến trình (h)

Màu sắc của thanh có thể được thay đổi nếu chúng ta coi thanh là một đối tượng đa giác, con cháu của các trục, đến lượt nó, chúng là con của cửa sổ đồ họa được tạo bởi chức năng thanh chờ. Thí dụ:

% tạo một cửa sổ với thanh tiến trình trống h = waitbar (0, "Giải quyết vấn đề giá trị riêng ..."); % tìm một con trỏ đến một đối tượng đa giác hP = findobj (h, "Type", "patch"); % thiết lập màu của nội thất và đường viền của tập hợp đối tượng đa giác (hP, "FaceColor", "g", "EdgeColor", "g") cho i = 1: 1000 thanh chờ (i / 1000, h) end close ( NS)

Bản thân các thuộc tính của cửa sổ cũng có thể được thay đổi bằng cách sử dụng cả con trỏ đến nó và thực tế là hàm thanh chờ cho phép bạn đặt thuộc tính cửa sổ trong các đối số đầu vào, ví dụ:

h = waitbar (0, "Đơn giản là màu trắng", "Màu", "w", "Tên", "chương trình");

Tạo Hộp thoại với các Nút - Chức năng Menu

Chức năng menu tạo một cửa sổ với văn bản và các nút được sắp xếp trong một cột với các nhãn được chỉ định. Sau khi người dùng nhấp vào nút, số của nó được trả về trong đối số đầu ra của hàm menu.

button = menu ("Chọn phương pháp", "Newton", "Gauss", "Zeidel")

Nếu người dùng chưa lựa chọn, thì button = 0.