Как выбрать и сравнить элементы строк в js из текстового файла
нужно сравнить хэши блоков, которые записаны в текстовом файле в виде:
Block ID: 1
Timestamp: 2023-06-11 10:00:00
Previous Block Hash: c46ab9e5e5f098ebb592761f28207df1b7195d530bf84e130b8bd88567d22c51
Block Hash: 995c48bde94e28821549b0f154b0e49b2c238f43fdb5c9553c2725061fe4e2a7
Block ID: 2
Timestamp: 13.06.2023, 15:56:39
Previous Block Hash: 995c48bde94e28821549b0f154b0e49b2c238f43fdb5c9553c2725061fe4e2a7
Block Hash: 0000b47ac01b041fa34aaa79e4b31ad99fa16b9da422806b38e1ffe9135f8e9f
Block ID: 3
Timestamp: 13.06.2023, 16:25:06
Previous Block Hash: 0000b47ac01b041fa34aaa79e4b31ad99fa16b9da422806b38e1ffe9135f8e9f
Block Hash: 000f88b0f28699a71cbfd3fa069d30c6a51ab0ff4ea7aec9caa346fd05e7d938
для этого нужно правильно написать:
const previousBlockHashLine = blocks[i].match(/Previous Block Hash: ([^\n]+)/);
const previousBlockHash = previousBlockHashLine[1];
const currentBlockHashLine = blocks[i - 1].match(/Block Hash: ([^\n]+)/);
const currentBlockHash = currentBlockHashLine[1];
в функции:
function checkDataDoTransaction(from, to, amount) {
if (typeof from === 'string' && typeof to === 'string' && typeof amount === 'number') {
// Чтение файла
const fileContent = fs.readFileSync('block_data.txt', 'utf-8');
// Разделение содержимого файла на блоки
const blocks = fileContent.split('\n\n');
// Подсчет количества блоков
const blockCount = blocks.length;
if (blockCount >= 2) {
// Счетчик несоответствующих хэшей
let mismatchCount = 0;
for (let i = 1; i < blockCount; i++) {
const previousBlockHashLine = blocks[i].match(/Previous Block Hash: ([^\n]+)/);
const previousBlockHash = previousBlockHashLine[1];
const currentBlockHashLine = blocks[i - 1].match(/Block Hash: ([^\n]+)/);
const currentBlockHash = currentBlockHashLine[1];
if (previousBlockHash !== currentBlockHash) {
mismatchCount++;
console.log('not a true hash ' + i);
return;
}
}
if (mismatchCount === 0) {
const result = transaction(from, to, amount);
// выполнение другого кода, если хеши верные
}
} else {
const result = transaction(from, to, amount);
// выполнение другого кода, если меньше двух блоков
}
} else if (from === '' || to === '' || isNaN(amount)) {
console.log("error: bad data-type!!!");
return;
} else {
console.log("bad data-type");
return;
}
}
Источник: Stack Overflow на русском