Tên của biến lưu trữ dữ liệu đã truy xuất. OutputVar sẽ để trống nếu xảy ra sự cố, chẳng hạn như tệp "đang được sử dụng" hoặc không tồn tại [trong trường hợp này ErrorLevel được đặt thành 1]. Nó cũng sẽ được để trống nếu Tên tệp là một tệp trống [trong trường hợp này, ErrorLevel được đặt thành 0]
tên tệpTên của tệp để đọc, được giả định là trong nếu đường dẫn tuyệt đối không được chỉ định
Tùy chọn. Không hoặc nhiều chuỗi sau đây cũng có thể xuất hiện ngay trước tên của tệp. Tách từng tùy chọn khỏi tùy chọn tiếp theo bằng một dấu cách hoặc tab. Ví dụ. *t *m5000 C:\Log Files\200601.txt
*c. Tải tệp hoặc dữ liệu nhị phân khác. Tất cả các tùy chọn khác bị bỏ qua khi có *c
*m1024. Nếu tùy chọn này bị bỏ qua, toàn bộ tệp sẽ được tải trừ khi không đủ bộ nhớ, trong trường hợp đó, thông báo lỗi sẽ hiển thị và luồng sẽ thoát [nhưng có thể sử dụng Thử để tránh điều này]. Nếu không, hãy thay thế 1024 bằng số byte thập phân hoặc thập lục phân. Nếu tệp lớn hơn mức này, thì chỉ phần đầu của tệp được tải
Ghi chú. Điều này có thể dẫn đến việc dòng cuối cùng kết thúc bằng dấu xuống dòng trần [`r] thay vì `r`n
*t. Thay thế bất kỳ/tất cả các trường hợp xuống dòng và xuống dòng [`r`n] bằng xuống dòng [`n]. Tuy nhiên, bản dịch này làm giảm hiệu suất và thường không cần thiết. Ví dụ: văn bản chứa `r`n đã có định dạng phù hợp để thêm vào. Tương tự, FileAppend phát hiện sự hiện diện của `r`n khi nó mở một tệp mới; . Cuối cùng, vòng lặp phân tích cú pháp sau đây sẽ hoạt động chính xác bất kể mỗi dòng kết thúc bằng `r`n hay chỉ `n. Loop, parse, MyFileContents, `n, `r
*Pnnn. [AHK_L 42+]. Ghi đè mã hóa mặc định do FileEncoding đặt, trong đó nnn phải là số nhận dạng trang mã
Xử lý lỗi
[v1. 1. 04+]. Lệnh này có thể đưa ra một ngoại lệ khi thất bại. Để biết thêm thông tin, xem
ErrorLevel được đặt thành 0 nếu tải thành công. Nó được đặt thành 1 nếu xảy ra sự cố như. 1] tập tin không tồn tại;
được đặt thành kết quả của hàm GetLastError[] của hệ điều hành
Đọc dữ liệu nhị phân
Tùy thuộc vào tệp, tham số và cài đặt mặc định, FileRead có thể diễn giải dữ liệu tệp dưới dạng văn bản và chuyển đổi nó thành tập lệnh được sử dụng. Điều này có thể gây ra sự cố nếu tệp chứa dữ liệu nhị phân, ngoại trừ các trường hợp sau
- Nếu có tùy chọn *C, tất cả các bản dịch trang mã và cuối dòng đều bị bỏ qua vô điều kiện
- Nếu có tùy chọn *Pnnn và nnn tương ứng với mã hóa chuỗi gốc, thì không có bản dịch trang mã nào xảy ra
- Nếu cài đặt mã hóa tệp hiện tại tương ứng với mã hóa chuỗi gốc, thì không có bản dịch trang mã nào xảy ra
Lưu ý rằng khi dữ liệu đã được đọc vào OutputVar, chỉ văn bản trước số 0 nhị phân đầu tiên [nếu có] sẽ được "nhìn thấy" bởi hầu hết các lệnh và hàm AutoHotkey. Tuy nhiên, toàn bộ nội dung vẫn còn và có thể được truy cập bằng các phương thức nâng cao như NumGet[]
Cuối cùng, FileOpen[] và hoặc có thể được sử dụng để đọc dữ liệu nhị phân mà không cần đọc toàn bộ tệp vào bộ nhớ trước
Khi mục tiêu là tải tất cả hoặc một phần lớn của tệp vào bộ nhớ, FileRead hoạt động tốt hơn nhiều so với việc sử dụng vòng lặp đọc tệp
Tệp có kích thước lớn hơn 1 GB sẽ khiến ErrorLevel được đặt thành 1 và OutputVar được để trống trừ khi có tùy chọn *m, trong trường hợp đó, phần đầu của tệp được tải
FileRead không tuân theo #MaxMem. Nếu có lo ngại về việc sử dụng quá nhiều bộ nhớ, hãy kiểm tra kích thước tệp trước với FileGetSize
FileOpen[] cung cấp nhiều chức năng nâng cao hơn FileRead, chẳng hạn như đọc hoặc ghi dữ liệu tại một vị trí cụ thể trong tệp mà không cần đọc toàn bộ tệp vào bộ nhớ. Xem Đối tượng tệp để biết danh sách các chức năng
FileEncoding, FileOpen[] / File Object, vòng lặp đọc tệp, FileReadLine, FileGetSize, FileAppend, IniRead, Sort, UrlDownloadToFile
Đôi khi bạn có yêu cầu đọc hoặc ghi một biến phức tạp từ hoặc tới một tệp. Điều này có thể là trong quá trình gỡ lỗi, bạn muốn đọc một biến phức tạp hoặc có thể so sánh nó với một giá trị trước đó để tìm sự khác biệt. Điều này có thể xảy ra trong QA khi bạn muốn điền một số biến với một số giá trị đã biết hoặc so sánh lại sự khác biệt với kết quả đã lưu trước đóCó một kỹ thuật nhỏ hữu ích mà bạn có thể sử dụng liên quan đến kiểu dữ liệu để đọc/ghi bất kỳ biến đã cho nào từ/đến một tệp
Điều này không cần cơ sở. Kênh để đọc/ghi tệp, bạn cũng không cần biết gì về biến cơ bản. Miễn là biến, hoặc nếu nó là một mảng hoặc bản ghi, thì các thành viên của nó bao gồm i. e một CHUỖI, không phải cơ sở. Bộ đệm chuỗi
Để ghi bất kỳ biến nào vào tệp, bạn có thể làm như sau…
DEFINE t TEXT ... LOCATE t IN MEMORY LET t = util.JSON.stringify[variable-name] CALL t.writeFile[file-name]
Đó là sử dụng phương thức để biểu thị biến dưới dạng chuỗi JSON, sau đó sử dụng phương thức để lưu chuỗi đó dưới dạng tệp
Để đọc từ tệp và điền vào một biến, bạn có thể làm ngược lại…
DEFINE t TEXT ... LOCATE t IN MEMORY CALL t.readFile[file-name] CALL util.JSON.parse[t, variable-name]
Đó là sử dụng phương thức đọc tệp thành biến TEXT, sau đó là phương thức phân tích chuỗi JSON thành cấu trúc biến
Cả hai đều sử dụng thực tế là thời gian chạy 4gl sẽ chuyển đổi VĂN BẢN thành CHUỖI và ngược lại theo
Bạn có thể làm điều gì đó tương tự với XML thay vì JSON mà không cần biến TEXT trung gian. Tôi thích sự mạnh mẽ của phương pháp phân tích cú pháp JSON và sự đơn giản của tệp