Jadi, saya mempunyai repositori yang mengandungi berbilang fail .csv yang mengandungi skema jadual pangkalan data. Saya menulis sekeping kod Golang yang mendapat senarai nama fail daripada repositori, kemudian membuka fail tersebut, membaca kandungan dan mencipta pertanyaan MySQL CREATE.
Masalah yang saya hadapi ialah untuk sesetengah fail .csv, kod Golang akhirnya membaca pengepala dengan salah, yang menyebabkan masalah kemudian. Contohnya, terdapat fail bernama config_hr.csv, config_oe.csv, contribution_analysis.csv yang dibaca sebagai onfig_hr.csv, onfig_oe.csv, contribution_analysi.csv. Masalah ini nampaknya dapat diselesaikan jika saya menggunakan huruf besar nama itu, tetapi banyak masalah lain akan timbul pada peringkat akhir projek kami.
Adakah ini sejenis isu pengekodan? Saya telah menyemak kod pada Windows, Mac dan Linux dan versi Golang ialah v1.21 terbaharu, sebarang bantuan atau pandangan akan amat dihargai!
Coretan kod Golang untuk membaca nama fail CSV
entries, err := FileEntry.Readdir(0) if err != nil { log.Fatal(err) } // Now, open all the files one by one, and extract the content of the files. // Then modify the resultant string to be of MySQL compatibility. for _, e := range entries { // Mimicking the SQL Query of Table Creation query. Query_String := ("CREATE TABLE IF NOT EXISTS " + strings.ToLower(strings.Trim(strings.Replace(e.Name(), " ", "_", -1), ".csv")) + " (\n") fmt.Println("Opening -- " + file_folder + "/" + e.Name()) file, err := os.Open(file_folder + "/" + e.Name()) if err != nil { log.Fatal(err) } defer file.Close() // Reading the CSV file from path. reader := csv.NewReader(file) records, err := reader.ReadAll() if err != nil { log.Fatal(err) }
Tukarkan fungsi string.Trim
dengan fungsi berikut.
// getFileNameWithoutExtension takes a file path as input and returns // the file name without its extension. It utilizes the filepath package // to extract the base name and then removes the extension. func getFileNameWithoutExtension(filePath string) string { // Get the base name of the file path (including extension) baseName := filepath.Base(filePath) // Calculate the length to remove the extension from the base name // and obtain the file name without extension fileNameWithoutExtension := baseName[:len(baseName)-len(filepath.Ext(baseName))] // Return the file name without extension return fileNameWithoutExtension }
Kod contoh:
Query_String := ("CREATE TABLE IF NOT EXISTS " + strings.ToLower(getFileNameWithoutExtension(strings.Replace(e.Name(), " ", "_", -1))) + " (\n")
Atas ialah kandungan terperinci Fungsi Golang tidak dapat membaca nama fail dengan betul. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!