Heim  >  Artikel  >  Backend-Entwicklung  >  Die Golang-Funktion kann den Dateinamen nicht richtig lesen

Die Golang-Funktion kann den Dateinamen nicht richtig lesen

PHPz
PHPznach vorne
2024-02-06 11:18:031246Durchsuche

Die Golang-Funktion kann den Dateinamen nicht richtig lesen

Frageninhalt

Ich habe also ein Repository mit mehreren CSV-Dateien, die das Tabellenschema der Datenbank enthalten. Ich habe einen Golang-Code geschrieben, der eine Liste von Dateinamen aus einem Repository abruft, diese Dateien dann öffnet, den Inhalt liest und eine MySQL CREATE-Abfrage erstellt.

Das Problem, mit dem ich konfrontiert bin, besteht darin, dass der Golang-Code bei einigen CSV-Dateien die Header letztendlich falsch liest, was später zu Problemen führt. Beispielsweise gibt es Dateien mit den Namen config_hr.csv, config_oe.csv, contribution_analysis.csv, die als onfig_hr.csv, onfig_oe.csv, contribution_analysi.csv gelesen werden. Dieses Problem schien gelöst zu sein, wenn ich den Namen großgeschrieben hätte, aber in den späteren Phasen unseres Projekts würden viele andere Probleme auftauchen.

Ist das ein Codierungsproblem? Ich habe den Code unter Windows, Mac und Linux überprüft und die Golang-Version ist die neueste Version 1.21. Für jede Hilfe oder Einsicht wäre ich sehr dankbar!

Golang-Code-Snippet zum Lesen des CSV-Dateinamens

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

Richtige Antwort


Ersetzen Sie die Funktion string.Trim durch die folgende Funktion.

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

Beispielcode:

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

Das obige ist der detaillierte Inhalt vonDie Golang-Funktion kann den Dateinamen nicht richtig lesen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen