Maison  >  Article  >  développement back-end  >  La fonction Golang ne peut pas lire correctement le nom de fichier

La fonction Golang ne peut pas lire correctement le nom de fichier

PHPz
PHPzavant
2024-02-06 11:18:031191parcourir

La fonction Golang ne peut pas lire correctement le nom de fichier

Contenu de la question

Donc, j'ai un référentiel contenant plusieurs fichiers .csv qui contiennent le schéma de table de la base de données. J'ai écrit un morceau de code Golang qui obtient une liste de noms de fichiers d'un référentiel, puis ouvre ces fichiers, lit le contenu et crée une requête MySQL CREATE.

Le problème auquel je suis confronté est que pour certains fichiers .csv, le code Golang finit par lire incorrectement les en-têtes, ce qui pose des problèmes par la suite. Par exemple, il existe des fichiers nommés config_hr.csv, config_oe.csv, contribution_analysis.csv qui sont lus comme onfig_hr.csv, onfig_oe.csv, contribution_analysi.csv. Ce problème semblait être résolu si je mettais le nom en majuscule, mais de nombreux autres problèmes surgiraient dans les étapes ultérieures de notre projet.

Est-ce une sorte de problème d'encodage ? J'ai vérifié le code sur Windows, Mac et Linux et la version Golang est la dernière v1.21, toute aide ou aperçu serait grandement apprécié !

Extrait de code Golang pour lire le nom du fichier 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)
        }

Bonne réponse


Remplacez la fonction string.Trim par la fonction suivante.

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

Exemple de code :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer