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: