fmpp-open Mailing List for FMPP: FreeMarker-based File PreProcessor (Page 3)
Brought to you by:
ddekany
You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
(23) |
Aug
(4) |
Sep
(11) |
Oct
(7) |
Nov
|
Dec
(2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(3) |
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(5) |
Jul
|
Aug
|
Sep
(2) |
Oct
(9) |
Nov
(2) |
Dec
|
2005 |
Jan
(2) |
Feb
(9) |
Mar
|
Apr
(1) |
May
|
Jun
(11) |
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2006 |
Jan
(2) |
Feb
(14) |
Mar
(4) |
Apr
|
May
(6) |
Jun
(7) |
Jul
(7) |
Aug
|
Sep
(4) |
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2009 |
Jan
(2) |
Feb
(2) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(10) |
Nov
|
Dec
(3) |
2010 |
Jan
(9) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
(2) |
Sep
|
Oct
(2) |
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
From: Daniel D. <dd...@fr...> - 2006-07-12 03:07:43
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title></title> <META http-equiv=3DContent-Type content=3D"text/html; charset=3Diso-8859-= 1"> <meta http-equiv=3D"Content-Style-Type" content=3D"text/css"> <style type=3D"text/css"><!-- body { margin: 5px 5px 5px 5px; background-color: #ffffff; } /* =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Text Styles =3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D */ hr { color: #000000} body, table /* Normal text */ { font-size: 9pt; font-family: 'Courier New'; font-style: normal; font-weight: normal; color: #000000; text-decoration: none; } span.rvts1 /* Heading */ { font-size: 10pt; font-family: 'Arial'; font-weight: bold; color: #0000ff; } span.rvts2 /* Subheading */ { font-size: 10pt; font-family: 'Arial'; font-weight: bold; color: #000080; } span.rvts3 /* Keywords */ { font-size: 10pt; font-family: 'Arial'; font-style: italic; color: #800000; } a.rvts4, span.rvts4 /* Jump 1 */ { font-size: 10pt; font-family: 'Arial'; color: #008000; text-decoration: underline; } a.rvts5, span.rvts5 /* Jump 2 */ { font-size: 10pt; font-family: 'Arial'; color: #008000; text-decoration: underline; } span.rvts6 { font-size: 11pt; font-family: 'tahoma'; font-weight: bold; color: #ffffff; } span.rvts7 { font-size: 11pt; font-family: 'tahoma'; } a.rvts8, span.rvts8 { font-size: 11pt; font-family: 'tahoma'; color: #0000ff; text-decoration: underline; } span.rvts9 { font-size: 8pt; font-family: 'arial'; font-style: italic; color: #c0c0c0; } /* =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Para Styles =3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D */ p,ul,ol /* Paragraph Style */ { text-align: left; text-indent: 0px; padding: 0px 0px 0px 0px; margin: 0px 0px 0px 0px; } .rvps1 /* Centered */ { text-align: center; } --></style> </head> <body> <p>I doesn't see any problem with this... so it's probably that GHI reall= y doesn't have an entry with "A1" key, or that "A1" is mapped to a Java n= ull value (that way the value is missing despite that the key exists).</p= > <p><br></p> <p>What do you see if you list the hash entries like:</p> <p><br></p> <p><#list ABC.DEF.GHI?keys as k></p> <p>${k} =3D> ${ABC.DEF.GHI[k]?default('Java null')}</p> <p></#list></p> <p><br></p> <p>Wednesday, July 12, 2006, 3:41:22 AM, Bruce Perryman wrote:</p> <p><br></p> <div><table border=3D0 cellpadding=3D1 cellspacing=3D2 style=3D"border-co= lor: #000000; border-style: solid;"> <tr valign=3Dtop> <td width=3D14 style=3D"background-color: #0000ff;"> <p><span class=3Drvts6>></span></p> </td> <td width=3D547 style=3D"background-color: #ffffff;"> <p><span class=3Drvts7>OK,</span></p> <p><br></p> <p><span class=3Drvts7>I'm doing something wrong, again.</span></p> <p><br></p> <p><span class=3Drvts7>This is the structure of my maps:</span></p> <p><br></p> <p><span class=3Drvts7>ABC</span></p> <p><span class=3Drvts7> ||</span></p> <p><span class=3Drvts7> =3D>DEF</span></p> <p><span class=3Drvts7> ||</span></p> <p><span class=3Drvts7> =3D>GHI</span></p> <p><span class=3Drvts7> |= |</span></p> <p><span class=3Drvts7> =3D= >A1=3Da</span></p> <p><span class=3Drvts7> =3D= >A2=3Db</span></p> <p><span class=3Drvts7> =3D= >A3=3Dc</span></p> <p><span class=3Drvts7> =3D>GHI2</span></p> <p><span class=3Drvts7> |= |</span></p> <p><span class=3Drvts7> =3D= >B1=3Dd</span></p> <p><span class=3Drvts7> =3D= >B2=3De</span></p> <p><span class=3Drvts7> =3D= >B3=3Df</span></p> <p><br></p> <p><span class=3Drvts7>Hopefully this description makes sense to you. ABC= contains a map DEF and DEF contains a few maps, two of which are GHI, an= d GHI2.</span></p> <p><br></p> <p><span class=3Drvts7>I am trying to evaluate A1 at the GHI level. This = I do as follows:</span></p> <p><br></p> <p><span class=3Drvts7>${ABC.DEF.GHI.A1}</span></p> <p><br></p> <p><span class=3Drvts7>This results in the error that A1 is undefined. If= I evaluate ${ABC.DEF.GHI} the error is that a string, etc. is expected b= ut the expression evaluates to a simple hash.</span></p> <p><br></p> <p><span class=3Drvts7>Can you please point me in the right direction? Ul= timately, I want to be able to use a variable to represent the GHI level = with something like:</span></p> <p><br></p> <p><span class=3Drvts7>${ABC.DEF[x].A1}</span></p> <p><br></p> <p><span class=3Drvts7>But I thought I'd work with the 'simple' case firs= t.</span></p> <p><br></p> <p><span class=3Drvts7>Thanks in advance for your help.</span></p> </td> </tr> </table> </div> <p><br></p> <p><br></p> <p><span class=3Drvts9>-- </span></p> <p><span class=3Drvts9>Best regards,</span></p> <p><span class=3Drvts9> Daniel Dekany</span></p> </body></html> |
From: Bruce P. <bpe...@ya...> - 2006-07-12 01:41:28
|
OK, I'm doing something wrong, again. This is the structure of my maps: ABC || =>DEF || =>GHI || =>A1=a =>A2=b =>A3=c =>GHI2 || =>B1=d =>B2=e =>B3=f Hopefully this description makes sense to you. ABC contains a map DEF and DEF contains a few maps, two of which are GHI, and GHI2. I am trying to evaluate A1 at the GHI level. This I do as follows: ${ABC.DEF.GHI.A1} This results in the error that A1 is undefined. If I evaluate ${ABC.DEF.GHI} the error is that a string, etc. is expected but the expression evaluates to a simple hash. Can you please point me in the right direction? Ultimately, I want to be able to use a variable to represent the GHI level with something like: ${ABC.DEF[x].A1} But I thought I'd work with the 'simple' case first. Thanks in advance for your help. --------------------------------- Yahoo! Messenger with Voice. Make PC-to-Phone Calls to the US (and 30+ countries) for 2¢/min or less. |
From: Thomas B. <tb...@ba...> - 2006-06-26 09:41:21
|
Am Sonntag, 25. Juni 2006 21:17 schrieb Daniel Dekany: > Sunday, June 25, 2006, 8:25:30 PM, Thomas Bayen wrote: [...] > > Your very nice configuration Syntax (tdd, reading of csv, ...) would not > > depend on FreeMarker. I could think of many uses of this nice Dataloaders > > apart from FreeMarker. > > Well, these are something to consider when (and if) I write > preprocessor next time, so thanks for the thoughts. As of FMPP, it's > practically impossible that I will refactor it to work this way, since > I'm way too busy with other OSS things that I give higher priority. > You see, I have to chose which thumb if mine I want to bite... > > Anyway, is there any obstacle in doing this what you wanted? I mean, > if you write data loaders that return non-FreeMarker objects only, > then it's what you wanted, isn't it? You say my idea is not totally bad and you say there are no internal technical obstacles. That's all I wanted to know. :-) If I find the time to do it I will dig into your source and give it a try. Thanks, Thomas Bayen Linux User Group Krefeld |
From: Daniel D. <dd...@fr...> - 2006-06-25 21:17:42
|
Sunday, June 25, 2006, 8:25:30 PM, Thomas Bayen wrote: > Hello, > > I wrote a nice template set to create a big static website from some > CSV-Files. But now I need to create some of the pages dynamically, so I will > have to use Tomcat, write a web container and call FMPP (or Freemarker?) > directly. > > As I see it is not easy to access the loaded data from within Java. I can't > just simply say "load the configuration data into this hash", deal with the > data in Java and say "use this hash with FMPP and create my output". > > The Dataloaders (especially the CsvDataLoader) returns a TemplateModel. Would > it not be nicer if it returns a simple Java-"Map"? FreeMarker would wrap it > and work as before. What would happen if we try to change CsvSequence to be a > Map? You can't do it in general. The TemplateModel-s (these are the FreeMarker variables basically) has abilities that java.util/java.lang suff hasn't. Like I can't create a value that is both a Map and a List with J2SE classes, but I can with TemplateModel-s. OK, most data loaders don't utilize these things, but for example the CSV data loader is one that does. > Your very nice configuration Syntax (tdd, reading of csv, ...) would not > depend on FreeMarker. I could think of many uses of this nice Dataloaders > apart from FreeMarker. Well, these are something to consider when (and if) I write preprocessor next time, so thanks for the thoughts. As of FMPP, it's practically impossible that I will refactor it to work this way, since I'm way too busy with other OSS things that I give higher priority. You see, I have to chose which thumb if mine I want to bite... Anyway, is there any obstacle in doing this what you wanted? I mean, if you write data loaders that return non-FreeMarker objects only, then it's what you wanted, isn't it? > Ciao, > > Thomas Bayen > Linux User Group Krefeld -- Best regards, Daniel Dekany |
From: Thomas B. <tb...@ba...> - 2006-06-25 18:26:01
|
Hello, I wrote a nice template set to create a big static website from some CSV-Files. But now I need to create some of the pages dynamically, so I will have to use Tomcat, write a web container and call FMPP (or Freemarker?) directly. As I see it is not easy to access the loaded data from within Java. I can't just simply say "load the configuration data into this hash", deal with the data in Java and say "use this hash with FMPP and create my output". The Dataloaders (especially the CsvDataLoader) returns a TemplateModel. Would it not be nicer if it returns a simple Java-"Map"? FreeMarker would wrap it and work as before. What would happen if we try to change CsvSequence to be a Map? Your very nice configuration Syntax (tdd, reading of csv, ...) would not depend on FreeMarker. I could think of many uses of this nice Dataloaders apart from FreeMarker. Ciao, Thomas Bayen Linux User Group Krefeld |
From: Daniel D. <dd...@fr...> - 2006-06-01 23:50:43
|
Thursday, June 1, 2006, 8:15:24 PM, Bruce Perryman wrote: > It must be something else that I'm doing wrong with my FreeMarker > syntax then. The data is correct in the map. I can see it in java. I > can't see it displayed with FreeMarker when the key name is > 'default'. If I change the name from 'default' to something else, > everyone's happy. Mystical... Maybe there is something there that confuses the object wrapper. What is exactly that map object that you pass to FreeMarker? It's exact class and like. And, when you rename that key so it works, then what will you get with the 'default' key? Still '' maybe? > Are you saying that you have a map with a key named 'default' and > the value is displayed correctly? Yes. > If I find out anything that I'm doing wrong, I'll post. What version > of FreeMarker are you testing with? It's 2.3.7rc1. But I don't think there was such bug earlier. > And how can I know what version my application is using? ${.version} -- Best regards, Daniel Dekany |
From: Bruce P. <bpe...@ya...> - 2006-06-01 18:15:38
|
It must be something else that I'm doing wrong with my FreeMarker syntax then. The data is correct in the map. I can see it in java. I can't see it displayed with FreeMarker when the key name is 'default'. If I change the name from 'default' to something else, everyone's happy. Are you saying that you have a map with a key named 'default' and the value is displayed correctly? If I find out anything that I'm doing wrong, I'll post. What version of FreeMarker are you testing with? And how can I know what version my application is using? Daniel Dekany <dd...@fr...> wrote: Thursday, June 1, 2006, 3:01:44 PM, Bruce Perryman wrote: > Thanks for responding. > > It's a nested Map populated in java from a db resultset. One of the > keys' name is 'default'. When I evaluate it, it is always empty > (""). If the name is something other than 'default', I retrieve the > value of the key. I'm assuming that the problem is that FreeMarker > is confused by the reserved name 'default'. That name is not reserved in FreeMarker. (It's used like foo?default('-'), but the possible words after the ? are specified by the template language, so it's not like reserving them.) > If that is true, renaming the key name would be a project. I was > wondering if FreeMarker could somehow 'escape' the name 'default' so > that I can retrieve the value associated with that key. FreeMarker doesn't reserve any map keys. But to be sure that there is no bug with the "default" key, I tried that and it works for me. I guess the problem is rather with the data source that you use to read the database. Or maybe simply the SQL statement is wrong. > Thanks. -- Best regards, Daniel Dekany _______________________________________________ fmpp-open mailing list fmp...@li... https://lists.sourceforge.net/lists/listinfo/fmpp-open --------------------------------- Feel free to call! Free PC-to-PC calls. Low rates on PC-to-Phone. Get Yahoo! Messenger with Voice |
From: Daniel D. <dd...@fr...> - 2006-06-01 17:54:34
|
Thursday, June 1, 2006, 3:01:44 PM, Bruce Perryman wrote: > Thanks for responding. > > It's a nested Map populated in java from a db resultset. One of the > keys' name is 'default'. When I evaluate it, it is always empty > (""). If the name is something other than 'default', I retrieve the > value of the key. I'm assuming that the problem is that FreeMarker > is confused by the reserved name 'default'. That name is not reserved in FreeMarker. (It's used like foo?default('-'), but the possible words after the ? are specified by the template language, so it's not like reserving them.) > If that is true, renaming the key name would be a project. I was > wondering if FreeMarker could somehow 'escape' the name 'default' so > that I can retrieve the value associated with that key. FreeMarker doesn't reserve any map keys. But to be sure that there is no bug with the "default" key, I tried that and it works for me. I guess the problem is rather with the data source that you use to read the database. Or maybe simply the SQL statement is wrong. > Thanks. -- Best regards, Daniel Dekany |
From: Bruce P. <bpe...@ya...> - 2006-06-01 13:01:55
|
Thanks for responding. It's a nested Map populated in java from a db resultset. One of the keys' name is 'default'. When I evaluate it, it is always empty (""). If the name is something other than 'default', I retrieve the value of the key. I'm assuming that the problem is that FreeMarker is confused by the reserved name 'default'. If that is true, renaming the key name would be a project. I was wondering if FreeMarker could somehow 'escape' the name 'default' so that I can retrieve the value associated with that key. Thanks. Daniel Dekany <dd...@fr...> wrote: Wednesday, May 31, 2006, 6:00:11 PM, Bruce Perryman wrote: > Hi, > > Quick, simple question. I have a hash which contains the name > 'default' as one of the keys. When I attempt to display it's value, > there's a problem. > > ${level1.level2.default} > > Is there a way to escape this, or must the key name be changed? > > Thanks Why is the "default" key already used for something? From what data source does the hash come from? -- Best regards, Daniel Dekany _______________________________________________ fmpp-open mailing list fmp...@li... https://lists.sourceforge.net/lists/listinfo/fmpp-open --------------------------------- Feel free to call! Free PC-to-PC calls. Low rates on PC-to-Phone. Get Yahoo! Messenger with Voice |
From: Daniel D. <dd...@fr...> - 2006-05-31 22:12:54
|
Wednesday, May 31, 2006, 6:00:11 PM, Bruce Perryman wrote: > Hi, > > Quick, simple question. I have a hash which contains the name > 'default' as one of the keys. When I attempt to display it's value, > there's a problem. > > ${level1.level2.default} > > Is there a way to escape this, or must the key name be changed? > > Thanks Why is the "default" key already used for something? From what data source does the hash come from? -- Best regards, Daniel Dekany |
From: Bruce P. <bpe...@ya...> - 2006-05-31 16:00:21
|
Hi, Quick, simple question. I have a hash which contains the name 'default' as one of the keys. When I attempt to display it's value, there's a problem. ${level1.level2.default} Is there a way to escape this, or must the key name be changed? Thanks --------------------------------- How low will we go? Check out Yahoo! Messengers low PC-to-Phone call rates. |
From: Daniel D. <dd...@fr...> - 2006-05-17 16:47:30
|
Wednesday, May 17, 2006, 5:41:11 PM, Bruce Perryman wrote: > Thanks for your help and great suggestions. > > For the <#break> should that go after the ${x.description?trim} or > the </#if> or does it matter? After the ${x.description?trim}, but before the </#if>. The <#break> directive, when executed, exits from the <#list> loop. Like if you were reached the end of the list, you see. > Thanks again. -- Best regards, Daniel Dekany |
From: Bruce P. <bpe...@ya...> - 2006-05-17 15:41:18
|
Thanks for your help and great suggestions. For the <#break> should that go after the ${x.description?trim} or the </#if> or does it matter? Thanks again. Daniel Dekany <dd...@fr...> wrote: Tuesday, May 16, 2006, 5:27:22 PM, Bruce Perryman wrote: > Hello. I hope that I explain this clearly enough. > > Let's say I have the code 'BBB' stored in 'myCode' and the following list: > > options= > [code:AAA,description:A1,text:A2, > �code:BBB,description:B1,text:B2, > �code:CCC,description:C1,text:C2, > �code:DDD,description:D1,text:D2] > > I need to display the description of the code value that I have. > What I currently do is the following: > > ��� ��� ��� ��� <#list options as x> > ��� ��� ��� ���� <#if (x.code?trim==mycode)>� > ��� ��� ��� ������� ${x.description?trim} > ��� ��� ��� �� � > ��� ��� ��� ��� ������ > > It seems to work. But is there a more efficient way to do this? What about using a map where the key is the code for the options? Also, if the <#list> solution remains, put a <#break> after the ${x.description?trim}. Unless, there can be more list items with the same code. -- Best regards, Daniel Dekany ------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid0709&bid&3057&dat1642 _______________________________________________ fmpp-open mailing list fmp...@li... https://lists.sourceforge.net/lists/listinfo/fmpp-open --------------------------------- Yahoo! Messenger with Voice. Make PC-to-Phone Calls to the US (and 30+ countries) for 2¢/min or less. |
From: Daniel D. <dd...@fr...> - 2006-05-16 18:27:31
|
Tuesday, May 16, 2006, 5:27:22 PM, Bruce Perryman wrote: > Hello. I hope that I explain this clearly enough. > > Let's say I have the code 'BBB' stored in 'myCode' and the following li= st: > > options=3D > [code:AAA,description:A1,text:A2, > =A0code:BBB,description:B1,text:B2, > =A0code:CCC,description:C1,text:C2, > =A0code:DDD,description:D1,text:D2] > > I need to display the description of the code value that I have. > What I currently do is the following: > > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 <#list options as x>=20 > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 =A0=A0=A0=A0 <#if (x.code?trim=3D=3Dmycod= e)>=A0=20 > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 =A0=A0=A0=A0=A0=A0=A0 ${x.description?tri= m} > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 =A0=A0 =A0 </#if> > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 </#list>=A0=A0=A0=A0=A0=A0=20 > > It seems to work. But is there a more efficient way to do this? What about using a map where the key is the code for the options? Also, if the <#list> solution remains, put a <#break> after the ${x.description?trim}. Unless, there can be more list items with the same code. --=20 Best regards, Daniel Dekany |
From: Bruce P. <bpe...@ya...> - 2006-05-16 15:27:31
|
Hello. I hope that I explain this clearly enough. Let's say I have the code 'BBB' stored in 'myCode' and the following list: options= [code:AAA,description:A1,text:A2, code:BBB,description:B1,text:B2, code:CCC,description:C1,text:C2, code:DDD,description:D1,text:D2] I need to display the description of the code value that I have. What I currently do is the following: <#list options as x> <#if (x.code?trim==mycode)> ${x.description?trim} </#if> </#list> It seems to work. But is there a more efficient way to do this? Thanks. --------------------------------- Love cheap thrills? Enjoy PC-to-Phone calls to 30+ countries for just 2¢/min with Yahoo! Messenger with Voice. |
From: Daniel D. <dd...@fr...> - 2006-03-15 17:24:15
|
FMPP 0.9.11 is released! Download: http://prdownloads.sourceforge.net/fmpp/fmpp_0.9.11.tar.gz http://prdownloads.sourceforge.net/fmpp/fmpp_0.9.11.zip Changes ------- New features, improvements: * New setting: "tagSyntax". This let you access this new setting of FreeMaker 2.3.5. * For nightly FMPP builds the build date is now logged in additional to the version number. * Updated FreeMarker to 2.3.6, and BeanShell to 2.0b1.1 in the distribution pack. Bugfixes: * The Ant task have processed all files of the source root directory if the number of selected file was 0. * Warning! Incompatible change! When "sources" was set to any empty list in a configuration file, the whole source root directory was processed in certain cases. From now it will process no files in that case. If you want to process the whole source root directory, don't specify the "sources" setting at all. * Warning! Incompatible Java API change! The Settings class was badly assumed that the whole source root directory has to be processed if the sources setting was an empty list. This was incorrect, as in that case simply 0 files should be processed, and processing the whole source directory should occur only if the "sources" setting was not set at all (it's null when you get it). So, if you want the whole source root directory to be processed, don't set the "sources" setting at all. If it is already set, you can "unset" it with settings.remove(Settings.NAME_SOURCES). * The Ant task didn't logged setting errors into the log file. * The test suite now works with JDK 1.5, if you add xpathSupport.lib to the build.properties. -- Best regards, Daniel Dekany |
From: Daniel D. <dd...@fr...> - 2006-03-02 09:53:37
|
Thursday, March 2, 2006, 8:58:32 AM, Ralf Hauser wrote: > Daniel, > > Thx for the hint. >> >> > The big problem with that is that empty lines are completely legal in >> >> > csv files. Not only they are legal, but they are in fact used by MS >> >> > Excel. They store rows where you have left all cells empty. >> > Just tested that with an interesting outcome. When inserting an >> > empty line, I still get the same error message referencing the >> > trailing empty lines, but the list already fails at the first empty >> line.. >> >> Of course it fails on the first empty line. Your FTL scripts fails on >> the first empty cell that it reaches, as you have not written it to >> handle empty cells. > Ok, please see below an attempt to do this. No no no... I told this so you understand why your script stops with error (do you understand that anyway?). But you don't have to handle empty cells, as they shouldn't occur in your application. As far as I understand, it's the generated csv file what is bad, not the FTL that later processes that and fails. So it would be better (cleaner) if simply, your FTL script that generates the csv file doesn't produce needless empty lines. Why not fix that instead? > While as per http://freemarker.org/docs/ref_directive_list.html, > there is a <#break>, there doesn't appear to be a <#continue> There is no "continue" directive. But if you want to skip a loop-cycle, you can put the whole cycle into an if, as you did (although I don't see why is the introduction of "continue" variable needed). But I don't think you need this... see above. > But perhaps I don't need that. Do you think there is any > improvement potential to the below? > > Regards > > Ralf > > <#list n_xml as d> > <#if d?exists> > <#list n_xml.headers as x><#if > d[x]?exists><#assign continue="true"><#else > ><#assign continue="false"></#if></#list> > <#if continue="true"> > INSERT INTO ${tbl} (<#list n_xml.headers as x>${x}<#if > x_has_next>,</#if></#list>) VALUES (<#list n_xml.headers as x>'<#if d[x]?exists>${d[x]}<#else > ><@pp.warning message = "skipping empty cell ${x_index}" /> </#if>'<#if > x_has_next>,</#if></#list>); > <#else> > <@pp.warning message = "skipping empty line0 ${d_index}" /> > </#if> > <#else><@pp.warning message = "skipping empty line1 ${d_index}" /></#if> > </#list> > -- Best regards, Daniel Dekany |
From: Ralf H. <ral...@gm...> - 2006-03-02 07:58:57
|
Daniel, Thx for the hint. > >> > The big problem with that is that empty lines are completely = legal in > >> > csv files. Not only they are legal, but they are in fact used by = MS > >> > Excel. They store rows where you have left all cells empty. > > Just tested that with an interesting outcome. When inserting an > > empty line, I still get the same error message referencing the > > trailing empty lines, but the list already fails at the first empty > line.. >=20 > Of course it fails on the first empty line. Your FTL scripts fails on > the first empty cell that it reaches, as you have not written it to > handle empty cells. Ok, please see below an attempt to do this. While as per http://freemarker.org/docs/ref_directive_list.html, there = is a <#break>, there doesn't appear to be a <#continue> But perhaps I don't need that. Do you think there is any improvement = potential to the below? Regards Ralf <#list n_xml as d> <#if d?exists> <#list n_xml.headers as x><#if d[x]?exists><#assign continue=3D"true"><#else ><#assign continue=3D"false"></#if></#list> <#if continue=3D"true"> INSERT INTO ${tbl} (<#list n_xml.headers as x>${x}<#if=20 x_has_next>,</#if></#list>) VALUES (<#list n_xml.headers as x>'<#if = d[x]?exists>${d[x]}<#else ><@pp.warning message =3D "skipping empty cell ${x_index}" /> = </#if>'<#if=20 x_has_next>,</#if></#list>); <#else> <@pp.warning message =3D "skipping empty line0 ${d_index}" /> </#if> <#else><@pp.warning message =3D "skipping empty line1 ${d_index}" = /></#if> </#list> |
From: Daniel D. <dd...@fr...> - 2006-03-01 11:50:26
|
Sunday, February 26, 2006, 12:03:41 PM, Daniel Dekany wrote: > Sunday, February 26, 2006, 11:35:23 AM, Ralf Hauser wrote: > >>> > Thanks, if would be great if that wasn't just >>> > "ignoreTrailingEmptyLines", but "ignoreEmptyLinesInAnyPosition"! >>> Empty lines at the end of a file can occur accidentally, but in the >>> middle of the CSV file? How could that happen? >> In many ways, not the last being the user, adding some <#-- --> >> comments or <!-- --> or "#" to the input file or whatever reason... > > (We are talking about CSV files... if somebody adds FTL or HTML > comments to a CSV file in the belief that those will be ignored, > that's really a situation that can't be handled.) > >> I guess, if you are taking care of it, why not make it robust even to that case as well >>> I want to schedule the .11 release after the FreeMarker 2.3.5 release, >>> which is planned be done next week, but who knows. Anyway, I will >>> create a qfix jar if this CVS thing is done. >> CSV or CVS? > > CSV. > >> Sounds good - I'll try to make a CVS-HEAD build, once you say it is ready. I have looked into this csv VS trailing empty lines issue (didn't committed anything yet). I have found that it already ignores the last empty line, since MS Excell puts a linebreak after the last row of you save in csv or txt format, and surely I have considered that format as the de-facto standard when I made the cvs data loader. Now, some tools (like CVS as far as I know) like to add a line break at the end of the text files, but only of there is no line-break there already. Thus, if they add that line-break, then there will be only 1 empty line at the end of the cvs file, that the data loader *do* ignore. So what's the problem exactly in your case? There are 2 empty lines at the end of the file? How? -- Best regards, Daniel Dekany |
From: Daniel D. <dd...@fr...> - 2006-02-26 11:03:52
|
Sunday, February 26, 2006, 11:35:23 AM, Ralf Hauser wrote: >> > Thanks, if would be great if that wasn't just >> > "ignoreTrailingEmptyLines", but "ignoreEmptyLinesInAnyPosition"! >> Empty lines at the end of a file can occur accidentally, but in the >> middle of the CSV file? How could that happen? > In many ways, not the last being the user, adding some <#-- --> > comments or <!-- --> or "#" to the input file or whatever reason... (We are talking about CSV files... if somebody adds FTL or HTML comments to a CSV file in the belief that those will be ignored, that's really a situation that can't be handled.) > I guess, if you are taking care of it, why not make it robust even to that case as well >> I want to schedule the .11 release after the FreeMarker 2.3.5 release, >> which is planned be done next week, but who knows. Anyway, I will >> create a qfix jar if this CVS thing is done. > CSV or CVS? CSV. > Sounds good - I'll try to make a CVS-HEAD build, once you say it is ready. -- Best regards, Daniel Dekany |
From: Daniel D. <dd...@fr...> - 2006-02-26 10:21:32
|
Sunday, February 26, 2006, 10:47:12 AM, Ralf Hauser wrote: > Daniel, > > Thanks, if would be great if that wasn't just > "ignoreTrailingEmptyLines", but "ignoreEmptyLinesInAnyPosition"! Empty lines at the end of a file can occur accidentally, but in the middle of the CSV file? How could that happen? > Ralf >> > My CSV file sometimes ends with a few empty extra lines. >> > This causes fmpp to print the following error: >> > >> > <<Caused by: freemarker.core.InvalidReferenceException: Expression >> > d[x] is undefined on line 29, column 70 in sql.fdd.>> >> >> CSV file? Sorry... recently somehow I believed it's about an FTL file. >> >> So, yes, empty lines mean empty (missing) cells. I guess I should add >> an ignoreTrailingEmptyLines option to the CSV data loader. Certainly I >> will have chance to look into this next week. > Perfect - then, you'll have one more reason to go for the .11 release! ;) I want to schedule the .11 release after the FreeMarker 2.3.5 release, which is planned be done next week, but who knows. Anyway, I will create a qfix jar if this CVS thing is done. -- Best regards, Daniel Dekany |
From: Ralf H. <ral...@gm...> - 2006-02-26 09:47:30
|
Daniel, Thanks, if would be great if that wasn't just = "ignoreTrailingEmptyLines", but "ignoreEmptyLinesInAnyPosition"! Ralf > > My CSV file sometimes ends with a few empty extra lines. > > This causes fmpp to print the following error: > > > > <<Caused by: freemarker.core.InvalidReferenceException: Expression > > d[x] is undefined on line 29, column 70 in sql.fdd.>> >=20 > CSV file? Sorry... recently somehow I believed it's about an FTL file. >=20 > So, yes, empty lines mean empty (missing) cells. I guess I should add > an ignoreTrailingEmptyLines option to the CSV data loader. Certainly I > will have chance to look into this next week. Perfect - then, you'll have one more reason to go for the .11 release! = ;)=20 Ralf |
From: Daniel D. <dd...@fr...> - 2006-02-25 23:04:59
|
Saturday, February 25, 2006, 7:49:36 PM, Ralf Hauser wrote: > Hi, > > My CSV file sometimes ends with a few empty extra lines. > This causes fmpp to print the following error: > > <<Caused by: freemarker.core.InvalidReferenceException: Expression > d[x] is undefined on line 29, column 70 in sql.fdd.>> CSV file? Sorry... recently somehow I believed it's about an FTL file. So, yes, empty lines mean empty (missing) cells. I guess I should add an ignoreTrailingEmptyLines option to the CVS data loader. Certainly I will have chance to look into this next week. -- Best regards, Daniel Dekany |
From: Daniel D. <dd...@fr...> - 2006-02-25 21:00:19
|
Saturday, February 25, 2006, 7:49:36 PM, Ralf Hauser wrote: > Hi, > > My CSV file sometimes ends with a few empty extra lines. > This causes fmpp to print the following error: > > <<Caused by: freemarker.core.InvalidReferenceException: Expression > d[x] is undefined on line 29, column 70 in sql.fdd.>> It's rather strange that you are saying... Why would a few more empty line at the end of a template file cause error? If the template executes without error without those empty lines, then it will do with the empty lines as well. I guess the error is caused by something else. > In the code sample below, I wanted to avoid the error by > - converting the csv-row into a string > - trim > - test for the length > > But as you see by the error in the below comment, this did not work. > > Any hints are highly appreciated! > > Ralf > > <#assign n_xml = pp.loadData("csv", dataFile,{'separator':','})> > <#list n_xml as d> > <#--@pp.warning message = "\"${d?string}\"" / BTW, it looks better to write: message = '"${d?string}"' > Caused by: freemarker.template.TemplateException: Expected number, > date, or string. d evaluated instead to > fmpp.models.CsvSequence$RowHash on line 22, column 28 in sql.fdd. > -->> > INSERT INTO ${tbl} (<#list n_xml.headers as x>${x}<#if > x_has_next>,</#if></#list>) VALUES (<#list n_xml.headers as x>'${d[x]}'<#if > x_has_next>,</#if></#list>); > </#list> And, if you have empty lines after this, then d[x] is suddenly undefined??? -- Best regards, Daniel Dekany |
From: Ralf H. <ral...@gm...> - 2006-02-25 18:49:59
|
Hi, My CSV file sometimes ends with a few empty extra lines. This causes fmpp to print the following error: <<Caused by: freemarker.core.InvalidReferenceException: Expression d[x] = is undefined on line 29, column 70 in sql.fdd.>> In the code sample below, I wanted to avoid the error by - converting the csv-row into a string - trim - test for the length But as you see by the error in the below comment, this did not work. Any hints are highly appreciated! Ralf <#assign n_xml =3D pp.loadData("csv", dataFile,{'separator':','})> <#list n_xml as d> <#--@pp.warning message =3D "\"${d?string}\"" / Caused by: freemarker.template.TemplateException: Expected number, date, = or string. d evaluated instead to fmpp.models.CsvSequence$RowHash on = line 22, column 28 in sql.fdd. --> INSERT INTO ${tbl} (<#list n_xml.headers as x>${x}<#if=20 x_has_next>,</#if></#list>) VALUES (<#list n_xml.headers as = x>'${d[x]}'<#if=20 x_has_next>,</#if></#list>); </#list> |