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

Reply via email to