-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.js
134 lines (97 loc) · 3.81 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
const fs = require('fs');
const worldListJson = require('./wordList');
const filePath = 'new-file.txt'; // Çıktı dosyası
const totalFileSizeInBytes = 4 * 1024 * 1024 * 1024; // 4 GB
const startTime = new Date();
const writeStream = fs.createWriteStream(filePath, { flags: 'a' });
console.log('\n-> İşlem başladı...');
start();
// Dosya yoksa oluşmasını bekle
// var olun dosyanın boyutunu oku ve var olan dosyanın kalan satırlarını tamamla
async function start() {
await controlFile()
fs.stat(filePath, (err, stats) => {
if (err) {
console.error(`Hata: ${err}`);
return;
}
const fileSizeInBytes = stats.size;
function writeData() {
const randomValue = getRandomValue(worldListJson.length)
const wordJson = worldListJson[randomValue]
const wordText = wordJson.word + " : " + wordJson.meanings.toString() + "\n";
writeStream.write(wordText, (err) => {
if (err) {
console.error('Dosya yazma hatası:', err);
return;
}
if (writeStream.bytesWritten < totalFileSizeInBytes - fileSizeInBytes) {
// Toplam dosya boyutunu aşmadıysa bir sonraki veri bloğunu yaz
writeData();
} else {
// Dosya yazma işlemi tamamlandı
writeStream.end(() => {
console.log(`-> Veri ${filePath} dosyasına yazıldı.`);
const endTime = new Date();
const elapsedTime = endTime - startTime;
console.log(`\n-> Yazma işlem süresi: ${Math.floor(elapsedTime / 1000 / 60 / 60)} saat ${Math.floor(elapsedTime / 1000 / 60)} dakika ${(Math.floor(elapsedTime / 1000) % 60)} saniye. Toplam Milisaniye: ${elapsedTime}`);
console.log("\n------------------------------\n");
readText(elapsedTime);
});
}
});
}
writeData();
})
}
function readText() {
const readline = require('readline');
const wordMap = new Map(); // Kelimelerin sayısını tutmak için bir harita (Map)
const rl = readline.createInterface({
input: fs.createReadStream(filePath),
output: process.stdout,
terminal: false
});
rl.on('line', (line) => {
// Satırdaki kelimeleri ayırır.
const words = line.split(/\s+/);
// Her kelimenin sayısını haritada bulur sayısını artırır.
words.forEach((word) => {
// Kelimenin karakter sayısı 4'ten büyükse kelimeyi ayrıştırır.
if (word.length > 4) {
// kelimenin sağındaki ve solundaki değerleri dikkate almaz
const cleanedWord = word.toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, '');
if (wordMap.has(cleanedWord)) {
wordMap.set(cleanedWord, wordMap.get(cleanedWord) + 1);
} else {
wordMap.set(cleanedWord, 1);
}
}
});
});
rl.on('close', () => {
// Kelimeyi çoktan aza sıralar
const sortedWords = [...wordMap.entries()].sort((a, b) => b[1] - a[1]);
// En çok geçen 10 kelime
const top10Words = sortedWords.slice(0, 10);
console.log('En çok geçen 10 kelime:\n');
top10Words.forEach((word, index) => {
console.log(`${index + 1}. ${word[0]}: ${word[1]} kez`);
});
const endTime = new Date();
const elapsedTime = endTime - startTime;
console.log(`\n-> OkumaYazma işlem süresi: ${Math.floor(elapsedTime / 1000 / 60 / 60)} saat ${Math.floor(elapsedTime / 1000 / 60)} dakika ${(Math.floor(elapsedTime / 1000) % 60)} saniye. Toplam Milisaniye: ${elapsedTime}`);
});
}
console.log("\n------------------------------\n");
function getRandomValue(max) {
return Math.floor(Math.random() * (max - 1));
}
// Rastgele değer oluştur.
function controlFile() {
if (!fs.existsSync(filePath)) {
console.log(`\n-> ${filePath} dosyası oluşturuldu.`);
} else {
console.log(`\n-> ${filePath} dosyası mevcut.`);
}
}