Записать строки с фиксированной длиной в файл Go - PullRequest
0 голосов
/ 11 октября 2018

Для печати оправданная и фиксированная длина кажется тем, о чем все спрашивают, и я нашел много примеров, например ...

package main

import "fmt"

func main() {
    values := []string{"Mustang", "10", "car"}
    for i := range(values) {
        fmt.Printf("%10v...\n", values[i])
    }

    for i := range(values) {
        fmt.Printf("|%-10v|\n", values[i])
    }
}

Ситуация

Но что, если мне нужно ЗАПИСАТЬ файл с байтами фиксированной длины?

Например: что если у меня есть требование, в котором говорится, запишите эту строку в файл, который должен быть 32 байта, выровнен по левому краю и дополнен вправо 0 *

Вопрос

Итак, как вы делаете это при записи в файл?

1 Ответ

0 голосов
/ 11 октября 2018

Есть функции, аналогичные fmt.PrintXX() функциям, которые начинаются с F, принимают форму fmt.FprintXX().Эти варианты записывают результат в io.Writer, который также может быть os.File.

Так что если у вас есть fmt.Printf() операторов, которые вы хотите направить в файл, просто замените их на вызов fmt.Fprintf(), передав файл в качестве первого аргумента:

var f *os.File = ... // Initialize / open file

fmt.Fprintf(f, "%10v...\n", values[i])

Если вы посмотрите нареализация fmt.Printf():

func Printf(format string, a ...interface{}) (n int, err error) {
    return Fprintf(os.Stdout, format, a...)
}

Это делает именно это: она вызывает fmt.Fprintf(), передавая os.Stdout в качестве выходных данных для записи.

Для того, как открыть файл,см. Как читать / записывать из / в файл с помощью Go?

См. связанный вопрос: Форматировать строку Go без печати?

...