首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Node.JS逐行读取字符串

Node.JS逐行读取字符串
EN

Stack Overflow用户
提问于 2016-02-26 00:38:40
回答 1查看 4.5K关注 0票数 0

我正在使用Node.Js,下面的代码块可以从数据库位置提取字符串,去掉某些垃圾,并将其设置为统一,这样以后我就可以用这些信息更新另一个表了。

代码语言:javascript
复制
jsUpdateCon.query('SELECT FileContent FROM codeFile WHERE ID = ?',[msg[1]], function(err, result){
    if (err) throw err;
    str = result[0].FileContent;
    var firstInstance = str.search(/=/) + 2;
    var lastInstance = str.lastIndexOf('\\') + 1;
    str = str.substring(firstInstance, lastInstance);
    str = str.replace(/\\n\\/g, "");
    str = str.replace(/\#(.*)/g, "");
    str = str.replace(/\n\s*\n/g, "\n");
    str = str.replace(/snippet /g, "\nsnippet ");
    str = str.replace(/^(?:\t)/gm, "");

    console.log(str);
});

下面是console.log(str);输出的示例

代码语言:javascript
复制
snippet cfabort
<cfabort>

snippet cfargument
<cfargument name=\"${1:ArgName}\" type=\"${2:any}\" default=\"${3:DefaultValue}\" hint=\"${4:hint about this argument}\">

snippet cfbreak
<cfbreak>

snippet cfcase
<cfcase value=\"${1:${SELECTED_TEXT:<!--- code --->}}\">
        ${0}
</cfcase>

snippet cfcatch
<cfcatch>
        ${0}
</cfcatch>

snippet cfcatch:type
<cfcatch type=\"${1:any}\">
        ${0}
</cfcatch>

snippet cfcomponent
<cfcomponent>
        ${0:<!--- code --->}
</cfcomponent>

snippet cfcontent
<cfcontent deleteFile=\"${1:no}\" file=\"${2:filename}\" reset=\"${3:yes}\" type=\"${4:fileType}\" variable=\"${5:variableName}\">

snippet cfcontinue
<cfcontinue>

snippet cfdefaultcase
<cfdefaultcase>

snippet cfdirectory:c
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:copy}\" destination=\"${3:destinationPath}\">

snippet cfdirectory:cr
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:create}\" >

snippet cfdirectory:d
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:delete}\" recurse=\"${3:yes|no}\">

snippet cfdirectory:l
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:list}\" name=\"${3:nameOfOutputSet}\" recurse=\"${4:yes|no}\" sort=\"${3:asc|desc}\" >

snippet cfdirectory:r
<cfdirectory directory=\"${1:pathToDirectory}\" action=\"${2:rename}\" newDirectory=\"${3:newNameforDirectory}\">

snippet cfdump
<cfdump var=\"

snippet cfelse
<cfelse>
    ${0:<!--- code --->}

我现在需要解析这个字符串以插入到数据库表中。

以代码片段小片段 ->开头的任何行插入到keyboardShortcuts.keyShort中,例如“cfabort”(删除代码段空间)。

->后面的每一行(不包括组之间的空行)都插入到keyboardShortcuts.snippet中,例如“保持”组的格式设置。

然后打开空白行,用下一个片段启动DB表中的下一行。

我是否使用来自NodeJs的读出线?这似乎只使用文件流,而不是内存中的字符串。

我还用别的东西吗?实现这一目标的最佳方法是什么?

目前的“工作守则”和Abdullah Shahin的答复:

代码语言:javascript
复制
jsUpdateCon.query('SELECT FileContent FROM codeFile WHERE ID = ?',[msg[1]], function(err, result){
    if (err) throw err;

    str = result[0].FileContent;
    var firstInstance = str.search(/=/) + 2;
    var lastInstance = str.lastIndexOf('\\') + 1;
    str = str.substring(firstInstance, lastInstance);
    str = str.replace(/\\"/g, "\"");
    str = str.replace(/\</g, "&lt;");
    str = str.replace(/\>/g, "&gt;");
    str = str.replace(/\\n\\/g, "");
    str = str.replace(/^\#(.*)/gm, "");
    str = str.replace(/\n\s*\n/g, "\n");
    str = str.replace(/^(?:\t)/gm, "");
    str = str.trim();

    str = str.replace(/^\s*[\r\n]/gm,"");

    var object = {};
    var tempArray = str.split("\n");
    var currentObj = "";
    for(var i=0; i<tempArray.length;i++){
        if(/snippet /g.test(tempArray[i])){
            currentObj = tempArray[i].replace(/snippet /g, "");
            object[currentObj] = "";
        } else {
            object[currentObj] += tempArray[i];
        }
    }
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-26 16:24:34

希望这会有所帮助,这段代码将把它解析成一个对象,所有的代码段都是键,并且您可以为它的键找到一个特定片段匹配的所有值。

代码语言:javascript
复制
    var object = {};
    text = text.replace(/^\s*[\r\n]/gm,"");
    var array = text.split("\n");
    var currentObj = "";
    for(var i=0;i<array.length;i++)
    {
        if(/snippet /g.test(array[i]))
        {
            currentObj = array[i].replace(/snippet /g,"");
            object[currentObj] = "";
        }
        else
        {
            object[currentObj] += array[i];
        }
    }
    console.log(object)

这是输出

代码语言:javascript
复制
{
    cfabort: '<cfabort>',
    cfargument: '<cfargument name=\\"${1:ArgName}\\" type=\\"${2:any}\\" default=\\"${3:DefaultValue}\\" hint=\\"${4:hint about this argument}\\">',
    cfbreak: '<cfbreak>',
    cfcase: '<cfcase value=\\"${1:${SELECTED_TEXT:<!--- code --->}}\\">        ${0}</cfcase>',
    cfcatch: '<cfcatch>        ${0}</cfcatch>',
    'cfcatch:type': '<cfcatch type=\\"${1:any}\\">        ${0}</cfcatch>',
    cfcomponent: '<cfcomponent>        ${0:<!--- code --->}</cfcomponent>',
    cfcontent: '<cfcontent deleteFile=\\"${1:no}\\" file=\\"${2:filename}\\" reset=\\"${3:yes}\\" type=\\"${4:fileType}\\" variable=\\"${5:variableName}\\">',
    cfcontinue: '<cfcontinue>',
    cfdefaultcase: '<cfdefaultcase>'
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35641233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档