2

我有一个文本文件,其中包含一长串术语(大约 800 个),格式按字母顺序排列:

一个字
字
cword
...

我想使用这个文件来创建一个新的 MySQL 表,其中每个术语都是一个字段,都具有属性 VARCHAR(5)。

如果字段按照它们在文件中出现的顺序插入,那将是最好的,因为我也在脚本中使用此文件进行内容分析,如果在将数据插入时保持(字母)顺序会更容易这个新表。

对于那些好奇的人,我是一名学生,正在做一个涉及内容分析的科学史论文项目。这些字段将用于保存频率数据。将有另一个字段作为主键并将这些字段与其他数据链接。我不是程序员,但确实有 10 年运行 linux 的经验,并且通常能够解决问题。然而,谷歌在这里让我失望了。

编辑

所以 Damoviso 指出我真正需要做的是将文件转换为 mySQL 命令。我使用 awk 和 uniq 生成以下内容:

CREATE TABLE keyterms_frq (
    filename VARCHAR(20),
    apperception VARCHAR(5),
    behaviorism VARCHAR(5),
    behavioristic VARCHAR(5),
    behaviorists VARCHAR(5),
    behaviorist VARCHAR(5),
    behavior VARCHAR(5),
    behaviour VARCHAR(5),
    brain VARCHAR(5),
    conditioned VARCHAR(5),
    conditioning VARCHAR(5),
    condition VARCHAR(5),
    consciousness VARCHAR(5),
    conscious VARCHAR(5),
    experienced VARCHAR(5),
    experiences VARCHAR(5),
    experience VARCHAR(5),
    intellect VARCHAR(5),
    introspections VARCHAR(5),
    introspection VARCHAR(5),
    introspectively VARCHAR(5),
    introspective VARCHAR(5),
    intuition VARCHAR(5),
    memoryimage VARCHAR(5),
    memory VARCHAR(5),
    mentality VARCHAR(5),
    mentally VARCHAR(5),
    mental VARCHAR(5),
    mind VARCHAR(5),
    mirrorscript VARCHAR(5),
    mirrorwriting VARCHAR(5),
    unconditioned VARCHAR(5)
);  

不幸的是,它仍然无法正常工作,因为它会生成以下内容:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“条件 VARCHAR(5)、意识 VARCHAR(5)、有意识 VARCHAR(5)、经验”附近使用正确的语法

我最初认为我可以生成的字段数量是有限的,但这似乎不是问题

4

5 回答 5

2

就个人而言(我知道这可能不会流行),但我倾向于使用 Excel 和类似 Textpad 或 Notepad++(甚至香草记事本)的东西来进行一次性数据库插入和像这样的表创建。

导入文本文件,以便将每个单词放在一个新行中,根据需要对它们进行排序,然后通过在顶部和底部插入列和一行来围绕它构建 SQL 命令。

在这种情况下,我建议:

  1. 在单元格 A1 的顶部插入一行,包含以下内容:
    CREATE TABLE MyTable (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  2. 在 B 列中与单词相邻的每个单元格中,输入以下内容:
    VARCHAR(5),
  3. 删除最后一个逗号,并);在下面的单元格中添加一个“”。
  4. 另存为制表符分隔的文件,然后使用您选择的文本编辑器,将制表符替换为空格。

您将得到一个可以针对数据库运行的 SQL 文件。

是的,它很乱而且不是很 1337,但它很有效。

于 2009-03-13T05:10:34.100 回答
2

嘿,弗兰克,我刚刚在你的 Facebook 页面上写了这个,但又来了:

“条件”是 MySQL 中的保留字,因此您不能使用该字命名任何列。在此处查看列表(至少对于 MySQL 5.1):

http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html

于 2009-03-13T21:12:35.443 回答
1

所以基本上我认为你要求的是:将文件读入程序。
让程序获取每一行并生成一个列出所有单词的字符串。
将 CREATE TABLE 语句与包含字段名称的字符串连接以创建 SQL 语句。
将该 SQL 命令发送到您的 sql 服务器。
我在这方面还太陌生,无法很好地实现这个想法,但希望如果这符合您的要求,我会给某人一个想法。

于 2009-03-13T05:09:23.980 回答
0

我不确定我是否完全理解您的问题,但我确实有一个想法:

如果要计算频率数据,如果在将单词插入表之前对其进行排序,则可以编写更有效的内容分析算法。这将减少数据库服务器上的 CPU 压力,并且您的频率计算器也会更有效。

也许您可以为我们详细说明您的问题?

于 2009-03-13T04:23:28.177 回答
0

其工作方式是使用“load data infile”将文件加载到数据库中。用 x 替换所有我前缀的变量

mysql -uxuser -pxpass xdatabase -e "LOAD DATA INFILE '/tmp/xwordlist.cvs' INTO TABLE xtable FIELDS TERMINATED BY ',' (xcolname)"
于 2010-12-02T20:38:54.833 回答