Home >Backend Development >Golang >Golang function cannot read filename correctly

Golang function cannot read filename correctly

PHPz
PHPzforward
2024-02-06 11:18:031276browse

Golang function cannot read filename correctly

Question content

So, I have a repository containing multiple .csv files that contain the table schema of the database. I wrote a piece of Golang code that gets a list of filenames from a repository, then opens those files, reads the contents and creates a MySQL CREATE query.

The problem I'm facing is that for some .csv files, the Golang code ends up reading the headers incorrectly, which causes problems later on. For example, there are files named config_hr.csv, config_oe.csv, contribution_analysis.csv which are read as onfig_hr.csv, onfig_oe.csv, contribution_analysi.csv. This problem seemed to be solved if I capitalized the name, but many other problems would arise in the later stages of our project.

Is this some kind of encoding issue? I've checked the code on Windows, Mac and Linux and the Golang version is the latest v1.21, any help or insight would be greatly appreciated!

Golang code snippet to read CSV file name

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)
        }

Correct answer


Replace the string.Trim function with the following function.

// 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
}

Sample code:

 Query_String := ("CREATE TABLE IF NOT EXISTS " + strings.ToLower(getFileNameWithoutExtension(strings.Replace(e.Name(), " ", "_", -1))) + " (\n")

The above is the detailed content of Golang function cannot read filename correctly. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete