gpt4 book ai didi

r - 如何使用 R 提取 SQL 文件的内容?

转载 作者:行者123 更新时间:2023-12-04 15:52:11 25 4
gpt4 key购买 nike

我有一位同事的文件夹/目录,里面全是 sql声明。该文件夹也由他每天更新。我想记录这些 sql future 同事的声明。但是,我正在寻找一种方法来“自动化”该过程。
我想用crontab每周一次并运行 R-Markdown自动更新现有 R-Markdown 的文件文件。

我的方法如下:

path = "c:/SQL_files/"
out.file<-""
file.names <- dir(path, pattern =".sql") # here I changed `.txt` to `.sql`
for(i in 1:length(file.names)){
file <- read.csv2.sql(file.names[i],header=TRUE, sep=";", stringsAsFactors=FALSE)
out.file <- rbind(out.file, file)
}


# That second approach comes very close, but just generates a `.txt` for the first
#`.sql` file in the directory with the error:

Error in match.names(clabs, names(xi)) :
names do not match previous names

文件在哪里:
 [1] "c:/SQL_files/first.sql"                                            
[2] "c:/SQL_files/second.sql"

path = "c:/SQL_files/"
out.file<-""
files <- list.files(path=path, pattern="*.sql", full.names=T, recursive=FALSE)
for(i in 1:length(files)){
file <- read.table(files[i],header=TRUE, sep=";", stringsAsFactors=FALSE)
out.file <- rbind(out.file, file)
}
loop提取 .sql 的内容似乎根本没有捕获内容(在第一个示例中)或仅捕获目录中第一个文件的内容(第二个示例)。所以我的问题。有没有办法从 SQL Text File (.sql) 中提取内容?这可能会导致 .txt/.Rmd如下:(但不是必须):

第一个循环的输出: my_sql_statement.sql
第二个循环的输出: Select * From Data

最佳答案

这个 RMD 文件生成一个 Markdown/HTML 文档,列出一些元数据和所有指定文件的内容:

---
title: "Collection of SQL files"
author: "SQLCollectR"
date: "`r format(Sys.time(), '%Y-%m-%d')`"
output:
html_document:
keep_md: yes
---

```{r setup, echo = FALSE}
library(knitr)
path <- "files/"
extension <- "sql"
```

This document contains the code from all files with extension ``r extension`` in ``r paste0(getwd(), "/", path)``.

```{r, results = "asis", echo = FALSE}
fileNames <- list.files(path, pattern = sprintf(".*%s$", extension))
fileInfos <- file.info(paste0(path, fileNames))

for (fileName in fileNames) {
filePath <- paste0(path, fileName)
cat(sprintf("## File `%s` \n\n### Meta data \n\n", fileName))
cat(sprintf(
"| size (KB) | mode | modified |\n|---|---|---|\n %s | %s | %s\n\n",
round(fileInfos[filePath, "size"]/1024, 2),
fileInfos[filePath, "mode"],
fileInfos[filePath, "mtime"]))
cat(sprintf("### Content\n\n```\n%s\n```\n\n", paste(readLines(filePath), collapse = "\n")))
}

```

所有的工作都在 for 中完成循环遍历 path 中的所有文件其名称以 extension 结尾.对于每个文件,都会打印一个带有“元数据”的表格,然后是实际的文件内容。使用 file.info 检索元数据并由文件大小、模式和上次修改时间戳组成。
cat(sprintf(...包含 markdown 的构造使代码看起来很复杂,但实际上它相当简单。

样本输出

将 SQL 文件与来自 this answer 的 SQL 语句一起使用,上面的RMD文件生成如下输出(使用HTML作为输出格式):

Sample output

关于r - 如何使用 R 提取 SQL 文件的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35085464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com