Kemampuan untuk membaca (dan menulis) file teks masuk dan keluar dari array string adalah persyaratan yang cukup umum. Ini juga sangat berguna ketika memulai dengan bahasa yang pada awalnya menghilangkan kebutuhan untuk mengakses database. Apa ada di Golang?
misalnya
func ReadLines(sFileName string, iMinLines int) ([]string, bool) {
dan
func WriteLines(saBuff[]string, sFilename string) (bool) {
Saya lebih suka menggunakan yang sudah ada daripada duplikat.
Jawaban:
Pada rilis Go1.1, ada bufio.Scanner API yang dapat dengan mudah membaca baris dari sebuah file. Pertimbangkan contoh berikut dari atas, yang ditulis ulang dengan Scanner:
sumber
Jika file tidak terlalu besar, ini bisa dilakukan dengan fungsi
ioutil.ReadFile
danstrings.Split
seperti ini:Anda dapat membaca dokumentasi di ioutil dan paket string .
sumber
"io/ioutil"
\r
. Jadi, Anda mungkin memiliki tambahan\r
untuk setiap elemen.Tidak dapat memperbarui jawaban pertama.
Bagaimanapun, setelah Go1 rilis, ada beberapa perubahan yang melanggar, jadi saya perbarui seperti yang ditunjukkan di bawah ini:
sumber
Anda dapat menggunakan os.File (yang mengimplementasikan antarmuka io.Reader ) dengan paket bufio untuk itu. Namun, paket-paket tersebut dibangun dengan mempertimbangkan penggunaan memori tetap (tidak peduli seberapa besar file tersebut) dan cukup cepat.
Sayangnya hal ini membuat pembacaan seluruh file ke dalam memori menjadi sedikit lebih rumit. Anda dapat menggunakan bytes.Buffer untuk bergabung dengan bagian-bagian baris jika melebihi batas baris. Bagaimanapun, saya sarankan Anda untuk mencoba menggunakan pembaca baris secara langsung dalam proyek Anda (terutama jika tidak tahu seberapa besar file teksnya!). Tetapi jika filenya kecil, contoh berikut mungkin cukup untuk Anda:
Alternatif lain mungkin menggunakan io.ioutil.ReadAll untuk membaca file lengkap sekaligus dan melakukan pemotongan per baris sesudahnya. Saya tidak memberi Anda contoh eksplisit tentang cara menulis baris kembali ke file, tetapi pada dasarnya itu
os.Create()
diikuti oleh loop yang mirip dengan yang ada di contoh (lihatmain()
).sumber
gob.Encode()
for itu. Hasilnya adalah file biner, bukan file teks yang dipisahkan baris baru. File ini dapat berisi semua jenis data, dapat diurai secara efisien, file yang dihasilkan akan lebih kecil dan Anda tidak perlu berurusan dengan baris baru dan alokasi dinamis tersebut. Jadi mungkin lebih cocok untuk Anda jika Anda hanya ingin mempertahankan sesuatu untuk digunakan nanti dengan Go.atau
sumber