Этот вопрос отличается от того, который связан с уже имеющим ответ. Именно этот фрагмент кода адаптирован из документации node.js относительно использования fs и readfile и ищет конец флага файла, который я узнал, это метод readfile.close. Спасибо за ответ.Доступ к данным, проанализированным readline & fs в node.js вне функции обратного вызова
Я написал небольшую утилиту локально, чтобы попытаться преобразовать текстовый файл из key:value
пар с пустой строкой, разделяющей программы в файл JSON для использования в проекте React.
Я получил основу функции readline непосредственно из документации node.js. Я использую узел 6.9.0 на моем макинтоше
здесь полный скрипт:
const readline = require('readline');
const fs = require('fs');
const rl = readline.createInterface({
input: fs.createReadStream('usat-ncaa-programs.txt')
});
var newPairs=["test"];
rl.on('line',
function (line) {
if (line===null){
newPairs.push("}], [ {")
} else if (line) {
var keyValue = line.match(/^(.*):(.*)/)
var newKeyValuePair = "'" + keyValue[1].trim() + "': '" + keyValue[2].trim() + "'"
newPairs.push(newKeyValuePair)
//console.log (newKeyValuePair)
}
})
console.log(newPairs)
Входной файл выглядит следующим образом (существует около 12 программ), я уже включен только 2 1/2, так что вы можете увидеть формат:
University: Arizona State University
Division: I
University Home Page: http://www.asu.edu/
Recruiting Link: https://questionnaire.acsathletics.com/Questionnaire/Questionnaire.aspx?&SPSID=1061112&SPID=177408&DB_LANG=C&DB_OEM_ID=30300&q=2015&s=159130&o=143
Team Homepage: http://www.thesundevils.com/index.aspx?path=triathlon
Head Coach: Cliff English
w: 480.965.0546
e: [email protected]
bg-color: #990033
color: #FFB310
University: Belmont Abby College
Division: II
University Home Page: http://belmontabbeycollege.edu/
Recruiting Link: https://coach.scoutforce.com/p/414f3219dd
Team Homepage: http://abbeyathletics.com/sports/wtri/index
Head Coach: Nick Radkewich
w: 704.461.5010
e: [email protected]
Twitter: https://twitter.com/AbbeyTri
bg-color: #FFFDD0
color: #DC143C
University:Black Hills State University
Division: II
University Home Page: http://www.bhsu.edu/
...
Моя проблема заключается в том, что в то время как я могу прочитать текстовый файл построчно и анализировать информацию, которая выглядит как файл JSON, я не могу получить доступ к этим данным вне из функция обратного вызова.
Я не знаю, как сохранить эти данные в новом файле или даже просто вывести объект на консоль для вырезания & вставить и отредактировать вручную.
В вышеприведенном сценарии регистрируемый вывод переменной newPairs является ["test"], а не строковым анализом, который я пытаюсь выполнить.
Если я помещаю console.log внутри обратного вызова, я получаю информацию, зарегистрированную на каждой итерации прочитанного файла. Я только хочу работать с данными, когда файл будет выполнен.
Я не нашел EOF
или аналогичный флаг в документации узла для fs
или readline
.
Кроме того, если есть более простой способ получить данные, которые я вводил в формат JSON, я бы хотел услышать. Заранее спасибо.
Вы должны прочитать [Почему моя переменная неизмененном после того как я изменить его внутри функции? - Ссылка на асинхронный код] (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) –
спасибо, что я сделал взглянуть. Я знал, что это связано с тем, что он асинхронен, но не был испытан с методами readfile. Еще раз спасибо, я ценю вашу помощь. – Shazam
Я могу только рекомендовать всегда взглянуть на полную документацию. В этом случае: https://nodejs.org/api/readline.html#readline_event_close. Вероятно, вы также хотите прочитать немного больше о потоках: https://github.com/substack/stream-handbook –