Je veux diviser un fichier texte (fichier.txt) en deux fichiers de textes de taille égale distincts tels que File1.txt et File2.txt. Ma stratégie dans la scission consiste à numériser des mots et à les compter puis écrivez la première moitié des mots sur File1.txt et le reste à File2.txt
Ceci est le code: HTTPS: // Godoc .ORG / BUFIO # Exemple-scanner - Mots P> Autant que je puisse deviner Scanner.Scan () renvoie un booléen. Après avoir compté le nombre de mots, comment je peux mettre en œuvre un tel code à Golang que les états indiquent la première moitié des mots à FILE1.TXT et le reste dans File2.txt? p> p>
3 Réponses :
Si vous voulez couper le fichier en deux, vous êtes à mi-chemin. Après avoir compté les mots, revenez simplement et lisez le fichier à nouveau, écrivant la moitié à un fichier une moitié à l'autre: ci-dessus, Si vous n'avez pas besoin de couper le fichier en deux, mais simplement mettre la moitié des mots dans un fichier et l'autre moitié de l'autre, vous pouvez Faites-le en un seul passage, sans compter. Simplement basculer le fichier pour écrire à partir de la première: P> fichier1 code> et et File2 code> sont les deux fichiers de sortie. P> w:=0
for scanner.Scan() {
var outfile *os.File
if w%2==0 {
outfile=file1
} else {
outfile=file2
}
fmt.Fprintln(outfile,scanner.Text())
w++
}
Avez-vous une idée aussi pour diviser la première moitié des mots de la seconde de la moitié des mots en ordre? Je veux dire comme cette phrase: "Vous pouvez maintenant accéder à tout contenu de la conférence à la demande pour le mois prochain." La première moitié des mots: "Vous pouvez maintenant accéder à tout contenu de la" seconde moitié des mots: "Conférence à la demande pour le mois prochain."
Compter les mots qui écrivent la première moitié à un fichier et la seconde moitié à la seconde le ferait
package main
import (
"bufio"
"fmt"
"log"
"os"
)
func main() {
WordbyWordScan()
}
func WordbyWordScan() {
file, err := os.Open("file.txt.txt")
if err != nil {
log.Fatal(err)
}
file1, err := os.Create("file1.txt.txt")
if err != nil {
panic(err)
}
file2, err := os.Create("file2.txt.txt")
if err != nil {
panic(err)
}
defer file.Close()
defer file1.Close()
defer file2.Close()
file.Seek(0, 0)
scanner := bufio.NewScanner(file)
scanner.Split(bufio.ScanWords)
w := 0
for scanner.Scan() {
var outfile *os.File
if w%2 == 0 {
outfile = file1
} else {
outfile = file2
}
fmt.Fprintln(outfile, scanner.Text())
w++
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
solution: