On Wed, Feb 11, 2009 at 3:12 PM, jose isaias cabrera <cabr...@wrc.xerox.com> wrote: > > "P Kishor" wrote... > > >> On Wed, Feb 11, 2009 at 2:00 PM, jose isaias cabrera >> <cabr...@wrc.xerox.com> wrote: >>> >>> >>> "P Kishor" wrote... >>> >>> >>>> On Wed, Feb 11, 2009 at 1:48 PM, jose isaias cabrera >>>> <cabr...@wrc.xerox.com> wrote: >>>>> >>>>> Greetings and salutations... >>>>> >>>>> I am having a problem with an specific UPDATE. One of the functions of >>>>> my >>>>> program is to capture all of the files in a directory so that one can >>>>> search >>>>> on a file name and find out where that file is quickly. This is >>>>> working >>>>> perfectly, until there is a file that has a single quote (') in its >>>>> name. >>>>> Say a directory has these three files: >>>>> >>>>> 1. filename0.txt >>>>> 2. filename1.txt >>>>> 3. filename'3.txt >>>>> 4. filename4.txt >>>>> >>>>> my update string is this, >>>>> >>>>> BEGIN; >>>>> >>>>> UPDATE LSOpenProjects SET >>>>> Xtra0 = '', >>>>> ... some other settings working ok ... >>>>> Xtra3 = ' >>>>> filename0.txt >>>>> filename1.txt >>>>> filename''3.txt >>>>> filename4.txt >>>>> ', >>>>> Xtra4 = '', >>>>> Xtra5 = '', >>>>> Xtra6 = '', >>>>> Xtra7 = '', >>>>> Xtra8 = '0.00', >>>>> Xtra9 = '', >>>>> XtraA = '', >>>>> XtraB = '', >>>>> XtraC = '', >>>>> XtraD = '', >>>>> XtraE = '', >>>>> XtraF = '' WHERE id = 3487; >>>>> COMMIT; >>>>> >>>>> The column in question is Xtra3. If I rename that file to NOT contain >>>>> the >>>>> single quote, the UPDATE works. Also, I add a newline (\n) to the >>>>> beginning >>>>> of the first filename and a new line after every filename. >>>>> >>>> >>>> >>>> works fine for me... see below >>>> >>>> sqlite> CREATE TABLE foo (a, b); >>>> sqlite> INSERT INTO foo VALUES (1, ' >>>> ...> filename0.txt >>>> ...> filename1.txt >>>> ...> filename''3.txt >>>> ...> filename4.txt >>>> ...> '); >>>> sqlite> SELECT * FROM foo; >>>> 1| >>>> filename0.txt >>>> filename1.txt >>>> filename'3.txt >>>> filename4.txt >>>> >>>> sqlite> UPDATE foo SET b = ' >>>> ...> blah.txt >>>> ...> gorp.tx >>>> ...> messed''up.txt >>>> ...> whoa.txt >>>> ...> ' WHERE a = 1; >>>> sqlite> SELECT * FROM foo; >>>> 1| >>>> blah.txt >>>> gorp.tx >>>> messed'up.txt >>>> whoa.txt >>>> >>> >>> Yes, I know. It works for me too when I do it by hand. The problem is >>> when >>> I read the files from the system... Hmmmm... Let me try something... >>> >> >> >> care to elaborate on "read files from the system" bit? You didn't >> provide that information first time. How are you "reading" files from >> the system? > > I am using D, and the statement to get all the files from a directory and > subdirectories is, > > char[][] dfiles = std.file.listdir(dir,"*"); > > this will return an array of char[] that will contain all of the files in > the directory from. I then do a foreach and create a string and return that > string. Here is the function... > > char[] GetListOfAllFilesInDir(char[] dir) > { > > info.text = "Getting list of files in directory..."; > char[][] dfiles = std.file.listdir(dir,"*"); > char[] s = "\n"; > foreach (char[] f; dfiles) > { > char[] fn = std.path.getBaseName(f); > if (fn[0 .. 1] == ".") > { > if (std.file.exists(f)) > std.file.remove(f); > continue; > } > if (fn[$ - 4 .. $] == ".bak" || > fn[$ - 4 .. $] == ".bk1" || > fn[$ - 4 .. $] == ".bk2") > { > if (std.file.exists(f)) > std.file.remove(f); > continue; > } > else if(std.string.find(fn,".backup.fm") > 0 || > std.string.find(fn,".backup.book") > 0) > { > if (fn[$ - 12 .. $] == ".backup.book" || fn[$ - 10 .. $] == > ".backup.fm") > { > if (std.file.exists(f)) > std.file.remove(f); > continue; > } > } > else if(std.string.find(fn,".rtf.backup") > 0) > { > if (fn[$ - 11 .. $] == ".rtf.backup") > { > if (std.file.exists(f)) > std.file.remove(f); > continue; > } > } > else if (std.string.tolower(std.path.getExt(f)) == "msg") > { > char[] str0 = r"\d+T_"; > > if (RegExp(str0).find(fn) == 0) // if filename starts with > 1123232343434T_ > { > // No need to tag it with time. Already has been tagged... > } > else > { > char[] saveF = f; > char[] nf0 = std.string.toString(std.date.getUTCtime()) ~ "T_" ~ > fn; > char[] dn0 = std.path.getDirName(f); // Parent directory > dn0 = dn0 ~ r"\" ~ nf0; > //msgBox("1. " ~ saveF ~ "\n2. " ~ dn0,"Testing..."); > std.file.rename(saveF,dn0); > fn = nf0; > } > } > if (std.string.find(s,"\n" ~ fn) == -1) // No filename repeats > s ~= fn ~ "\n"; > } > //s = std.string.strip(s); > //msgBox(s); > return s; > } > > after this, I will prepare s and UPDATE Xtra3. Here is the question: the > original UPDATE should have worked, correct? Meaning that the > filename'3.txt should have been prepared as filename''3.txt, correct? >
yup. That is what I did... _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users