/ / Hướng dẫn làm việc với tệp văn bản trong Go

Hướng dẫn làm việc với tệp văn bản trong Go

Là một ngôn ngữ lập trình, Go có một loạt các tính năng có sẵn, bao gồm khả năng tạo, đọc và ghi các tệp như tệp văn bản (.txt).


Tệp là thành phần quan trọng trong cuộc sống hàng ngày của chúng ta trong thế giới hiện đại. Tệp văn bản hữu ích để lưu trữ dữ liệu có cấu trúc mà con người có thể đọc được mà không cần sử dụng phần mềm hoặc cơ sở dữ liệu bên ngoài.

Nếu bạn đang tự hỏi làm thế nào bạn có thể bắt đầu thao tác các tệp văn bản trong Go, thì bài viết này là nơi phù hợp cho bạn.


Gói bufio khi di chuyển

Các bufio gói, là một phần của thư viện tiêu chuẩn của Go, được sử dụng cho các hoạt động đầu vào và đầu ra có bộ đệm, do đó có tên như vậy. Các bufio gói được xây dựng dựa trên io.Readerio.Writer giao diện, được sử dụng rộng rãi trong việc triển khai phần lớn các gói tiêu chuẩn của Go.

Các bufio gói tiến thêm một bước nữa bằng cách triển khai bộ đệm, làm cho nó hữu ích cho các hoạt động IO liên quan đến dữ liệu dạng văn bản.

Để sử dụng bufio gói trong chương trình của bạn, bạn nên nhập nó cùng với các gói khác.

import (
"fmt"
"bufio"
)

Có thể bạn đã nghe nói khi bắt đầu với Go rằng nó đi kèm với mọi thứ bạn có thể cần với tư cách là một lập trình viên. Để giao tiếp trực tiếp với hệ điều hành của bạn, có một gói được gọi là hệ điều hành cung cấp các chức năng độc lập với nền tảng.

Các hệ điều hànhbufio các gói làm cho việc thao tác tệp văn bản trở nên vô cùng đơn giản.

Mặc dù phần lớn hệ điều hành các chức năng của gói giống như Unix, tất cả chúng đều sử dụng kiểu xử lý lỗi Go, giúp việc đọc các thông báo lỗi và mã gỡ lỗi trở nên đơn giản.

Vậy bạn thao tác với các tệp chứa văn bản trong Go như thế nào?

Cách đọc dữ liệu từ tệp văn bản

Để đọc dữ liệu từ các tệp văn bản, bạn cần gọi hệ điều hành gói của Mở() hàm, chấp nhận tên của tệp được đọc như một tham số. Một phương pháp khác để lấy tệp là bằng cách sử dụng OpenFile () hàm số.

Sự khác biệt chính giữa Mở()OpenFile () đang trong quá trình thực hiện của họ. Mở() mở một tệp ở chế độ chỉ đọc (với O_RDONLY cờ), trong khi OpenFile () mang lại sự linh hoạt hơn bằng cách chấp nhận ba tham số cụ thể là:

  • Tên tệp
  • Chế độ mở tệp: Các chế độ mở tệp hợp lệ được hiển thị trong bảng dưới đây.
    Lá cờ Nghĩa
    O_RDONLY Mở tệp ở chế độ chỉ đọc
    O_WRONLY Mở tệp ở chế độ chỉ ghi
    O_RDWR Mở tệp ở chế độ đọc-ghi
    O_APPEND Thêm dữ liệu vào tệp khi ghi
    O_CREATE Tạo một tệp mới nếu không có tệp nào tồn tại
    O_EXCL Được sử dụng với O_CREATE, để chỉ ra rằng tệp chỉ nên được tạo nếu nó không tồn tại
    O_SYNC Mở tệp cho I / O đồng bộ
    O_TRUNC Cắt ngắn tệp đang mở, nếu có thể
  • Quyền đối với tệp: Giống như các bit cấp quyền đối với tệp trong Linux được sử dụng để chỉ định các quy tắc truy cập tệp, ví dụ: 0777 để cấp quyền đọc, ghi và thực thi cho tất cả các kiểu người dùng.

Đoạn mã dưới đây cho biết cách đọc dữ liệu từ tệp văn bản trong Go bằng cách sử dụng os.Open ()Quét() mà trong trường hợp này, chạy trong vòng lặp Tìm kiếm.

package main
import (
"bufio"
"fmt"
"log"
"os"
)
/**
CONTENT OF THE "testfile.txt" file.
lorem ipsum dolor sit amet
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet
Lorem Ipsum Dolor Sit Amet
lOREM iPSUM dOLOR sIT aMET
LoReM IpSuM DoLoR SiT AmEt
*/
func main() {
file, err := os.Open("testfile.txt")
// file, err = os.OpenFile("testfile.txt", os.O_RDONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
fmt.Println("File opened successfully. Now reading file contents line by line:")
// create scanner from the file to read text from
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}

Khi bạn chạy đoạn mã trên với chạy filename.gonó tạo ra đầu ra được hiển thị bên dưới:

Nếu bạn chỉ nhập tên tệp chứ không phải đường dẫn đến Mở() hoặc OpenFile () chức năng cho các hoạt động đọc, Go giả sử tệp nằm trong thư mục hiện tại và trả về lỗi nếu nó không tìm thấy nó. Bạn nên chuyển đường dẫn đến tệp nếu bạn cần làm việc với các tệp bên ngoài thư mục hiện tại.

Cách ghi dữ liệu vào tệp văn bản

Các bufio gói cung cấp một bộ đệm nhà văn giao diện lưu trữ byte dữ liệu và ghi chúng vào tệp với sự trợ giúp của Tuôn ra() hàm số.

Mã mẫu tiếp theo là phần tiếp theo của mã để đọc tệp. Trong ví dụ này, dữ liệu được ghi vào testfile.txt sử dụng O_WRONLYO_APPEND cờ.

Thêm các dòng mã sau vào chương trình ở trên, trước dấu ngoặc nhọn đóng của chính() hàm số:


file, err = os.OpenFile("testfile.txt", os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
fmt.Println("File opened successfully, Now preparing to write data to file...")
textWriter := bufio.NewWriter(file)
_, err = textWriter.WriteString("-This is a new text added to the file.")
if err != nil {
log.Fatal(err)
}
textWriter.Flush()
fmt.Println("Data written to file successfully...")

Đầu ra của chương trình hoàn chỉnh của bạn sẽ giống như sau:

Khi bạn mở testfile.txt tệp, bạn cũng sẽ thấy dòng mới được nối vào cuối tệp giống như hình ảnh bên dưới:

Xử lý tệp khi di chuyển thật dễ dàng

Go cho phép bạn làm việc với nhiều loại tệp, không chỉ tệp văn bản. Có rất nhiều thư viện và chức năng có sẵn bổ sung để làm việc với các loại dữ liệu khác nhau từ tệp, bao gồm JSON và CSV.

Để xem cách chúng hoạt động khác nhau tùy thuộc vào tình huống, bạn có thể thử nghiệm với các cờ và quyền tệp khác nhau có sẵn để sử dụng với OpenFile ().

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *