思路:
1.用扫描仪和ocr软件把书籍和杂志转换成txt文本文件。文本文件名就是标题,文本目录就是上传的栏目号。
2.建一个js文件,代码如下。上传到网站数据库目录。
3.把扫描好的文本文件目录上传到数据库目录,执行js文件。数据就自动批量添加到数据库投稿表FS_Contribution 。
4.我把FS_Contribution 字段AddTime改成默认值Date() 字段Author也增加了默认值。
5.增加数据表Clss ,增加cateID cateName两个字段。
6.现我用风讯3.1已经实现批量添加,存在的问题FS_Contribution数据表ClassID不能按照txt文本目录添加。ContID字段也是不能按照投稿方式添加。
7.希望喜欢风讯的高人大家一起把这个功能完善。
/// www.jlcbm.info
var consoleOnly = true;
var defaultTimeout = 1;
var WSShell;
var fso;
var currentFolder;
var ForReading = 1, ForWriting = 2, ForAppending = 8;
var CharSetDefault = -2, CharSetUnicode = -1, CharSetAscii = 0;
var AttrNormal = 0, AttrReadOnly = 1, AttrHidden = 2, AttrSystem = 4,
AttrVolume = 8, AttrDirectory = 16, AttrArchive = 32, AttrAlias = 1024,
AttrCompressed = 2048;
var strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Downloads\\FooSun_Data.mdb;Persist Security Info=False"; // 数据库链接位置
Init();
Main();
function Init() {
// detect command line
try {
WScript.StdOut.WriteLine(" ");
} catch (e) {
consoleOnly = false;
}
// initialize
WSShell = new ActiveXObject("WScript.Shell");
fso = new ActiveXObject("Scripting.FileSystemObject");
currentFolder = GetCurrentFolder();
}
function Main() {
var text;
// say hello
text = "开始保存信息.";
Out(text,true);
COut("当前工作目录: \r\n"+ currentFolder);
var conn = new ActiveXObject("ADODB.Connection");
conn.Open(strConn);
var rs = new ActiveXObject("ADODB.RecordSet");
var rs2 = new ActiveXObject("ADODB.RecordSet");
rs.Open("select cateID, cateName from Clss where 1 = 0", conn, 1, 3);
rs2.Open("select Title, SubTitle, ContID, Content, KeyWords, ClassID from FS_Contribution where 1 = 0", conn, 1, 3);
var cateFolders = new Enumerator(currentFolder.SubFolders);
var treatedFiles = 0;
for (; !cateFolders.atEnd(); cateFolders.moveNext()) {
COut("分类目录名:" + cateFolders.item().Name);
rs.AddNew();
rs("cateName") = cateFolders.item().Name;
rs.Update();
var cateID = parseInt(rs("cateID"));
var cateName = parseInt(rs("cateName"));
var files = GetFiles(cateFolders.item(), "[.]*[.]txt");
COut("该目录下共有 " + files.length + " 个文件。开始保存", true);
for (var i = 0; i < files.length; i++) {
var f = fso.GetFile(files);
var title = f.Name.replace(/([.]txt)/i, '');
var content = ReadFile(f);
rs2.AddNew();
rs2("Title") = title;
rs2("SubTitle") = title;
rs2("KeyWords") = title;
rs2("Content") = content;
rs2("ClassID") = cateName;
rs2.Update();
treatedFiles++;
}
COut("保存完毕。", true);
}
rs.Close();
rs2.Close();
conn.Close();
// say goodbye
text = "已成功插入数据。\r\n\r\n"
+ "处理的文件数目:\t" + treatedFiles + "\r\n"
Out(text,false);
}
/// Files ------------------------------------------------------
// getcurrent folder
function GetCurrentFolder() {
return fso.GetFolder(fso.GetFile(WScript.ScriptFullName).ParentFolder);
}
/// Output ------------------------------------------------------
// output
function Out(text, useTimeout) {
if (useTimeout) {
useTimeout = defaultTimeout;
} else {
useTimeout = -1;
}
if (consoleOnly) {
WScript.StdOut.WriteLine(text);
} else {
WSShell.Popup(text, useTimeout, "添加信息到 Access 数据库");
}
}
// output
function COut(text, useTimeout) {
if (useTimeout) {
useTimeout = defaultTimeout;
} else {
useTimeout = -1;
}
if (consoleOnly) {
WScript.StdOut.WriteLine(text);
}
}
function ReadFile(file) {
var stream = file.OpenAsTextStream(ForReading, CharSetDefault);
text = stream.ReadAll();
stream.Close();
return text;
}
function WriteFile(file, text) {
var ro = ((file.Attributes & AttrReadOnly) != 0);
if (ro) file.Attributes -= AttrReadOnly;
var stream = file.OpenAsTextStream(ForWriting, CharSetDefault);
stream.Write(text);
stream.Close();
if (ro) file.Attributes += AttrReadOnly;
}
// determine, if filename matches given mask
function MatchesMask(file, mask) {
return new RegExp(mask).test(file);
}
// find files
function FindFiles(mask) {
return GetFiles(currentFolder, mask);
}
// get files in current folder & subfolders
function GetFiles(folder, mask) {
var result = new Array();
// do files in current folder
var files = new Enumerator(folder.Files);
for (; !files.atEnd(); files.moveNext()) {
if (MatchesMask(files.item(), mask)) {
result.push("" + files.item());
}
}
// do subfolders in current folder
var folders = new Enumerator(folder.SubFolders);
for (; !folders.atEnd(); folders.moveNext()) {
result = result.concat(GetFiles(folders.item(), mask));
}
return result;
}
[此贴子已经被作者于2006-8-23 21:03:33编辑过]