我有一个文本文件。它包含简单的文本。
FileName - 234567.txt
我已经构建了此文件中存在的内容的语料库。我清理了语料库并创建了字符串向量,以将完整的文本存储在单个字符串向量中
FullTextstring <- "Complete text here"
我还将文件名保存在矢量
中FileName <- "234567.txt"
我在数据库中有一个表&#34; TextData&#34;以下是表格字段: -
FileId int primary key , where FileID is the FileName
FileContent nvarchar(Max), where FileContent is text presnt in file
我想在文件夹中插入文件名及其内容。所以,我的查询是如何在&#34; FileName&#34;中插入值?和&#34; FullTextstring&#34;向量到我的表&#34; TextData&#34;。
我正在使用Windows 8.1。我已经安装了包&#34; RODBC&#34; 。我也看了很多例子,但找不到任何有用的东西。
答案 0 :(得分:2)
如果您不熟悉R或数据库或两者兼而有之,我还发现一些RODBC文档无益。希望这可以帮助你入门。
如上面的评论所示,您需要做的第一件事是建立与数据库的ODBC连接。由于您没有指定,我假设您正在使用某些版本的MS-SQL Server。有关与MS-SQL服务器建立连接的说明here。
在您的计算机上建立连接后(让我们称之为textSQL
),您将要将该连接分配给R中的对象。在这里,我调用连接{{ 1}}。
con
如果你真的想从向量中插入每个值require(RODBC)
con <- odbcConnect("textSQL")
(似乎将所有内容组合到数据帧中,然后通过TextData
更新数据库将是首选),那么你&#39 ; ll只需要运行SQL来做到这一点。但是,在您可以执行此操作之前,您需要将sqlSave()
向量转换为可由整数数据库字段接收的内容。假设所有文件名都有三个字符后缀(加上一个句点),那么下面的内容应该可行。
FileName
现在您已将文件名存储为R中的数字,我们可以移动到在数据库服务器上填充表。为此,我们可以简单地将# as stated in your question
FileName <- "234567.txt"
FullTextstring <- "Complete text here"
# convert FileName to int
require(stringr)
#filename length
l <- nchar(FileName)
#filename suffix
s <- 4
FileName <- as.numeric(str_sub(FileName,1,l-s))
函数与sqlQuery()
函数结合使用,如下所示。请注意,该函数的第一个参数是上面指定的连接对象(paste()
)。
con
如果给定向量中有多个文件名和字符串,请相应地更新sqlQuery(con
,paste("insert into TextData values ("
,FileName[1]
,",\'"
,FullTextstring[1]
,"\')"))
。
另外,请注意RODBC内置字段长度有一个上限(我认为它是64k,如上所述here)。如果您正在处理大量文本,那么您可能会遇到此限制。如果发生这种情况,您可以修改源代码(它只是一行)并从源代码重新编译。
在评论中按请求更新
为了进行此更改,您需要先从CRAN here下载tar球。
接下来,您将需要导航到位于[1]
目录中的C代码。
在第735行左右,您将看到一条注释和代码行,如下所示:
\RODBC\src
您可能希望将其更改为此类型(根据您的需要,新值可能更大或更小):
/* sanity check as the reports are sometimes unreliable */
if (datalen > 65535) datalen = 65535;
保存更改,然后使用here提供的说明重新安装修改后的RODBC软件包。
注意:当我尝试从RODBC连接将信息带入 R时,此解决方案对我有用。我充其量只是一名新手C程序员,并不完全理解Ripley的所有代码。此解决方案不会破坏RODBC,但它可能不允许您将从 R中的极大字段传输到数据库中。您遇到的截断可能是某些SQL服务器设置的问题,而不是RODBC中的 /* sanity check as the reports are sometimes unreliable */
if (datalen > 10000000) datalen = 10000000;
上限。