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

Die Golang-Funktion kann den Dateinamen nicht richtig lesen

PHPz
Freigeben: 2024-02-06 11:18:03
nach vorne
1285 Leute haben es durchsucht

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)
        }
Nach dem Login kopieren


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
}

Nach dem Login kopieren

Beispielcode:

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

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage