POJO String limited to 127 chars

Hi,
I am using a POJO which contains a string field. When I add this POJO to my Crystal Report as a datasource, it limits the length of the string to 127 chars. Some of my string values are longer than this value and Crystal Report is not showing these longer strings correctly. Can you tell me how I can increase the size of the string size for a POJO in Crystal Reports?

Hi Rolf
- If the string data field is longer than 12 characters, the first 12 characters are displayed correctly but the rest of the characters are displayed as "???", or as Chinese characters. This behavior only occurs when the data source is POJO.
- Cause
In POJOResultSetFactory.java, the result integer length for String data is set to 12. This is a known issue with customized JRC POJO applications.
- Resolution
This issue is resolved in Crystal Reports for Eclipse by applying the latest product updates.
To work around this issue when using JRC, modify the POJO DataSet by completing these steps:
Open the POJOResultSetFactory.java file, located at C:\Program Files\Business Objects\Common\3.5\java\lib\samples.
At line 488, change the result integer to 255 from 12.
Recompile and create a new jar with all the JAVA files.
Hope this helps you.
Thanks
Soni

Similar Messages

  • Strings longer than 127 characters

    Hello,
    is it now possible to add a String from a POJO with more than 127 characters?
    Thanks
    Christian

    When you design a Crystal Reports report in Crystal Reports for Eclipse, where you drop in a POJO class for a datasource, you'll see that all String columns are given the default length of 127.
    When you inject a Collection of POJO class instances into the report using the setDataSource(java.util.Collection, ...), you'll see that any String with length greater than 127 is truncated. 
    How do you avoid this?
    In the JRC for XI R2 - you could re-compile the pojoSample.jar file after modifying the default value, or you could specify a longer length using the POJOResultSetFactory.setMemberColumnDisplaySize(...) method.
    The POJOResultSetFactory method for Crystal Report for Eclipse has been renamed and incorporated into rasapp.jar.  The source code for the POJO factory classes are no longer provided - thus, the XI Release 2 solutions do not work.
    So what you will need to do for CR for Eclipse, is you must manually create the ResultSet by invoking the com.crystaldecisions.sdk.occa.report.application.internal.POJOResultSetHelper class directly - POJOResultSetHelper is for CR4E what POJOResultSetFactory was for XI Release 2.
    Here's a code snippet:
        // SimplePojo.class is my POJO class, getName is a String property for the class,
        // and arrayList is the Collection of POJO class instances.
        POJOResultSetHelper pojoHelper = new POJOResultSetHelper(SimplePojo.class);
        pojoHelper.setMemberColumnDisplaySize("getName", 256);
        java.sql.ResultSet rs = pojoHelper.createResultSet(arrayList);
        reportClientDocument.getDatabaseController().setDataSource(rs, "SimplePojo", "SimplePojo");
    a programmer learning programming from perl is like a chemisty student learning the definition of "exothermic" with dynamite

  • String Limitation

    Hi,
    Does anybody know if they still have the 4000 char string limitation in ORACLE 11g??
    In other words, is it possible to UPDATE a CLOB field and harcode more than 4000 char in the Update script ?
    Thanks,
    Marc.

    this is what you get which means that it can store minimum of 100000 char? A 'minimum of 100000 char' ?
    You've just iterated 100000 times, adding a character each time.
    It has nothing to do a with a minimum?
    Clob's go up tp 4 GB, and there's no minimum.
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements001.htm#sthref174
    MHO%xe> select * from tablea;
          COL1       COL2       COL3
             1          1          1
             1          2          2
    Verstreken: 00:00:00.03
    MHO%xe> create table temp(col clob);
    Tabel is aangemaakt.
    Verstreken: 00:00:00.59
    MHO%xe>
    MHO%xe>
    MHO%xe> declare
      2  v_string clob;
      3  begin
      4  for i in 1..2
      5  loop
      6  v_string:=v_string||'A';
      7  end loop;
      8  insert into temp values(v_string);
      9  end;
    10  /
    PL/SQL-procedure is geslaagd.
    Verstreken: 00:00:00.43
    MHO%xe> select length(col) from temp;
    LENGTH(COL)
              2Edited by: hoek on Jun 5, 2009 6:54 AM adjusted the 'minimum'

  • Getting java.lang.NumberFormatException: For input string: "63420;https=127.0.0.1" Error while creating bpel service in oracle soa suite12c

    Hi ,
    I am getting below error when I try to create a bpel project in oracle soa suite 12C, can any one help on this issue why it is happing, earlier am able to create bpel service.
    java.lang.NumberFormatException: For input string: "63420;https=127.0.0.1"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:492)
    at java.lang.Integer.parseInt(Integer.java:527)
    at oracle.jdeveloper.webservices.wsdl.CachedWSDLReader.getNewReaderInstance(CachedWSDLReader.java:379)
    at oracle.jdeveloper.webservices.wsdl.CachedWSDLReader$1.initialValue(CachedWSDLReader.java:299)
    at oracle.jdeveloper.webservices.wsdl.CachedWSDLReader$1.initialValue(CachedWSDLReader.java:295)
    at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:160)
    at java.lang.ThreadLocal.get(ThreadLocal.java:150)
    at oracle.jdeveloper.webservices.wsdl.CachedWSDLReader.getReaderImpl(CachedWSDLReader.java:309)
    at oracle.jdeveloper.webservices.wsdl.CachedWSDLReader.getExtensionRegistry(CachedWSDLReader.java:425)
    at oracle.jdeveloper.webservices.wsdl.CachedWSDLReader.readWSDLWithExtensionRegistry(CachedWSDLReader.java:468)
    at oracle.tip.tools.ide.utils.xml.wsdl.WSDLUtil.parseWSDL(WSDLUtil.java:1398)
    at oracle.tip.tools.ide.bpel.v2.datamodels.util.TemplateUtil.createProcessWSDL(TemplateUtil.java:1208)
    at oracle.tip.tools.ide.bpel.v2.designer.builder.model.ProcessBuilderUtil.createWSDLFiles(ProcessBuilderUtil.java:198)
    at oracle.tip.tools.ide.bpel.v2.designer.builder.model.ProcessBuilder.createIDEProject(ProcessBuilder.java:73)
    at oracle.tip.tools.ide.bpel.v2.designer.builder.ui.CreationDialogPanel.doCreate(CreationDialogPanel.java:57)
    at oracle.tip.tools.ide.bpel.shared.designer.processbuilder.ui.BPELCreationDialog.handleOK(BPELCreationDialog.java:199)
    at oracle.tip.tools.ide.bpel.shared.designer.processbuilder.ui.BPELCreationDialog.actionPerformed(BPELCreationDialog.java:239)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6516)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6281)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4872)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at oracle.javatools.internal.ui.EventQueueWrapper._dispatchEvent(EventQueueWrapper.java:169)
    at oracle.javatools.internal.ui.EventQueueWrapper.dispatchEvent(EventQueueWrapper.java:151)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219)
    at java.awt.Dialog.show(Dialog.java:1082)
    at java.awt.Component.show(Component.java:1655)
    at java.awt.Component.setVisible(Component.java:1607)
    at java.awt.Window.setVisible(Window.java:1014)
    at java.awt.Dialog.setVisible(Dialog.java:1005)
    at oracle.tip.tools.ide.bpel.shared.designer.processbuilder.ui.BPELCreationDialog.display(BPELCreationDialog.java:83)
    at oracle.tip.tools.ide.bpel.shared.designer.manager.BPELDesignerManager.launchCreationDialog(BPELDesignerManager.java:53)
    at oracle.tip.tools.ide.bpel.shared.designer.manager.BPELDesignerManager.launchCreationDialog(BPELDesignerManager.java:48)
    at oracle.tip.tools.ide.bpel.shared.plugins.soa.sca.BPELComponent.createImplementation(BPELComponent.java:46)
    at oracle.tip.tools.ide.fabric.gui.controller.ActionComponentEdit.add(ActionComponentEdit.java:118)
    at oracle.tip.tools.ide.fabric.gui.controller.ActionComponentEdit.process(ActionComponentEdit.java:95)
    at oracle.tip.tools.ide.fabric.gui.controller.DiagramController.processActionRequest(DiagramController.java:358)
    at oracle.tip.tools.ide.fabric.gui.controls.DiagramSOAPopupHandler.actionPerformed(DiagramSOAPopupHandler.java:117)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
    at java.awt.Component.processMouseEvent(Component.java:6516)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6281)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4872)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at oracle.javatools.internal.ui.EventQueueWrapper._dispatchEvent(EventQueueWrapper.java:169)
    at oracle.javatools.internal.ui.EventQueueWrapper.dispatchEvent(EventQueueWrapper.java:151)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
    Thanks in advance.
    Cheers,
    bala

    Please paste composite.xml and bpel source file here. Looks like one of the endpoints is getting goofed up.

  • Sql string limitation

    I need to know if there is any sql string limitation in jdbc. I am trying to send a sql that is 250 lines long through preparedStatement, after execute statement, the thread hangs for sometime and it times out with no results. If I copy the same sql in sqlplus/toad it executes in 1 second.
    My old sql string was 200 lines and was working properly, i am guessing there may be some limitation to sql length in jdbc?
    Please let me know your view
    Thanks

    You can ask for it with getMaxStatementLength () on DatabaseMetaData.
    It returns 65535 on a Oracle 8.1.7.4.1 database and 9.2.0.4.0 database with the 10.2.0.1.0 jdbc driver
    Regards
    Wim

  • Query string limitation?

    What's the limitation(in bytes) for query string when we use redirect. Means in following example, How big qStr (in bytes) could be?
    String qStr="a=1&b=2";
    response.sendRedirect("page1.jsp?"+qStr);

    The query string limitation is exactly 255 characters (including character 0) in most browsers but Java can handle 1024 characters. Always program for the least common denominator so you will be prepared for anything if Murphy steps into the picture.

  • ASCII character/string processing and performance - char[] versus String?

    Hello everyone
    I am relative novice to Java, I have procedural C programming background.
    I am reading many very large (many GB) comma/double-quote separated ASCII CSV text files and performing various kinds of pre-processing on them, prior to loading into the database.
    I am using Java7 (the latest) and using NIO.2.
    The IO performance is fine.
    My question is regarding performance of using char[i] arrays versus Strings and StringBuilder classes using charAt() methods.
    I read a file, one line/record at a time and then I process it. The regex is not an option (too slow and can not handle all cases I need to cover).
    I noticed that accessing a single character of a given String (or StringBuilder too) class using String.charAt(i) methods is several times (5 times+?) slower than referring to a char of an array with index.
    My question: is this correct observation re charAt() versus char[i] performance difference or am I doing something wrong in case of a String class?
    What is the best way (performance) to process character strings inside Java if I need to process them one character at a time ?
    Is there another approach that I should consider?
    Many thanks in advance

    >
    Once I took that String.length() method out of the 'for loop' and used integer length local variable, as you have in your code, the performance is very close between array of char and String charAt() approaches.
    >
    You are still worrying about something that is irrevelant in the greater scheme of things.
    It doesn't matter how fast the CPU processing of the data is if it is faster than you can write the data to the sink. The process is:
    1. read data into memory
    2. manipulate that data
    3. write data to a sink (database, file, network)
    The reading and writing of the data are going to be tens of thousands of times slower than any CPU you will be using. That read/write part of the process is the limiting factor of your throughput; not the CPU manipulation of step #2.
    Step #2 can only go as fast as steps #1 and #3 permit.
    Like I said above:
    >
    The best 'file to database' performance you could hope to achieve would be loading simple, 'known to be clean', record of a file into ONE table column defined, perhaps, as VARCHAR2(1000); that is, with NO processing of the record at all to determine column boundaries.
    That performance would be the standard you would measure all others against and would typically be in the hundreds of thousands or millions of records per minute.
    What you would find is that you can perform one heck of a lot of processing on each record without slowing that 'read and load' process down at all.
    >
    Regardless of the sink (DB, file, network) when you are designing data transport services you need to identify the 'slowest' parts. Those are the 'weak links' in the data chain. Once you have identified and tuned those parts the performance of any other step merely needs to be 'slightly' better to avoid becoming a bottleneck.
    That CPU part for step #2 is only rarely, if every the problem. Don't even consider it for specialized tuning until you demonstrate that it is needed.
    Besides, if your code is properly designed and modularized you should be able to 'plug n play' different parse and transform components after the framework is complete and in the performance test stage.
    >
    The only thing that is fixed is that all input files are ASCII (not Unicode) characters in range of 'space' to '~' (decimal 32-126) or common control characters like CR,LF,etc.
    >
    Then you could use byte arrays and byte processing to determine the record boundaries even if you then use String processing for the rest of the manipulation.
    That is what my framework does. You define the character set of the file and a 'set' of allowable record delimiters as Strings in that character set. There can be multiple possible record delimiters and each one can be multi-character (e.g. you can use 'XyZ' if you want.
    The delimiter set is converted to byte arrays and the file is read using RandomAccessFile and double-buffering and a multiple mark/reset functionality. The buffers are then searched for one of the delimiter byte arrays and the location of the delimiter is saved. The resulting byte array is then saved as a 'physical record'.
    Those 'physical records' are then processed to create 'logical records'. The distinction is due to possible embedded record delimiters as you mentioned. One logical record might appear as two physical records if a field has an embedded record delimiter. That is resolved easily since each logical record in the file MUST have the same number of fields.
    So a record with an embedded delimiter will have few fields than required meaning it needs to be combined with one, or more of the following records.
    >
    My files have no metadata, some are comma delimited and some comma and double quote delimited together, to protect the embedded commas inside columns.
    >
    I didn't mean the files themselves needed to contain metadata. I just meant that YOU need to know what metadata to use. For example you need to know that there should ultimately be 10 fields for each record. The file itself may have fewer physical fields due to TRAILING NULLCOS whereby all consecutive NULL fields at the of a record do not need to be present.
    >
    The number of columns in a file is variable and each line in any one file can have a different number of columns. Ragged columns.
    There may be repeated null columns in any like ,,, or "","","" or any combination of the above.
    There may also be spaces between delimiters.
    The files may be UNIX/Linux terminated or Windows Server terminated (CR/LF or CR or LF).
    >
    All of those are basic requirements and none of them present any real issue or problem.
    >
    To make it even harder, there may be embedded LF characters inside the double quoted columns too, which need to be caught and weeded out.
    >
    That only makes it 'harder' in the sense that virtually NONE of the standard software available for processing delimited files take that into account. There have been some attempts (you can find them on the net) for using various 'escaping' techniques to escape those characters where they occur but none of them ever caught on and I have never found any in widespread use.
    The main reason for that is that the software used to create the files to begin with isn't written to ADD the escape characters but is written on the assumption that they won't be needed.
    That read/write for 'escaped' files has to be done in pairs. You need a writer that can write escapes and a matching reader to read them.
    Even the latest version of Informatica and DataStage cannot export a simple one column table that contains an embedded record delimiter and read it back properly. Those tools simply have NO functionality to let you even TRY to detect that embedded delimiters exist let alone do any about it by escaping those characters. I gave up back in the '90s trying to convince the Informatica folk to add that functionality to their tool. It would be simple to do.
    >
    Some numeric columns will also need processing to handle currency signs and numeric formats that are not valid for the database inpu.
    It does not feel like a job for RegEx (I want to be able to maintain the code and complex Regex is often 'write-only' code that a 9200bpm modem would be proud of!) and I don't think PL/SQL will be any faster or easier than Java for this sort of character based work.
    >
    Actually for 'validating' that a string of characters conforms (or not) to a particular format is an excellent application of regular expressions. Though, as you suggest, the actual parsing of a valid string to extract the data is not well-suited for RegEx. That is more appropriate for a custom format class that implements the proper business rules.
    You are correct that PL/SQL is NOT the language to use for such string parsing. However, Oracle does support Java stored procedures so that could be done in the database. I would only recommend pursuing that approach if you were already needing to perform some substantial data validation or processing the DB to begin with.
    >
    I have no control over format of the incoming files, they are coming from all sorts of legacy systems, many from IBM mainframes or AS/400 series, for example. Others from Solaris and Windows.
    >
    Not a problem. You just need to know what the format is so you can parse it properly.
    >
    Some files will be small, some many GB in size.
    >
    Not really relevant except as it relates to the need to SINK the data at some point. The larger the amount of SOURCE data the sooner you need to SINK it to make room for the rest.
    Unfortunately, the very nature of delimited data with varying record lengths and possible embedded delimiters means that you can't really chunk the file to support parallel read operations effectively.
    You need to focus on designing the proper architecture to create a modular framework of readers, writers, parsers, formatters, etc. Your concern with details about String versus Array are way premature at best.
    My framework has been doing what you are proposing and has been in use for over 20 years by three different major nternational clients. I have never had any issues with the level of detail you have asked about in this thread.
    Throughout is limited by the performance of the SOURCE and the SINK. The processing in-between has NEVER been an issu.
    A modular framework allows you to fine-tune or even replace a component at any time with just 'plug n play'. That is what Interfaces are all about. Any code you write for a parser should be based on an interface contract. That allows you to write the initial code using the simplest possible method and then later if, and ONLY if, that particular module becomes a bottlenect, replace that module with one that is more performant.
    Your intital code should ONLY use standard well-established constructs until there is a demonstrated need for something else. For your use case that means String processing, not byte arrays (except for detecting record boundaries).

  • What is the best method to have multiple string limits in a single test

    Hello All,
    I need a little advice I have two strings that need to be evaluated as a pass criteria for a single test test step (Numeric String limit test). What would be the best approach to this?
    The strings are "00000000 00000010" and  "00000000 00000000"

    A couple of ideas:
    1) Concatenate the strings. Both when storing them in the data source and in your limits for the values you expect.
    2) Use arrays for both the data source and limit and loop on the step requiring all iterations to pass and using the loop index variable in your expressions for your string limit test. For example, for the limit expression you would have:
    Locals.expectedValues[RunState.LoopIndex]
    and for the data source expression you would have:
    Locals.stringMeasurements[RunState.LoopIndex]
    Then you would set the loop options on the step to loop the required number of times. You can even use the expression function GetNumElements(Locals.expectedValue) in your loop while expression to set the number of iterations dynamically.
    Hope this helps,
    -Doug

  • List-processing: limitations to 255 chars per line?

    Hi,
    check the sample code below and if possible, execute it in some of your systems:
    start-of-code
    REPORT  ZISM_TEST52 LINE-SIZE 300.
    DATA:
      line(300) TYPE c.
    WRITE '0123456789' TO line+250(10).
    WRITE: / 'From variable', /.
    WRITE  line.
    WRITE: / 'Directly to the list', /.
    WRITE AT 251 '0123456789'.
    end-of-code
    As you can see from the execution, when writing something into the char variable (in this case line), and try to put it into your screen, there is a limitation - only the first 255 characters of the variable take place in the resulted list. But, if you write directly into the list, this limitation is missing.
    My question is closely related to this limitation:
    Is there a possibility to avoid this limitation while putting something into the variable, and after that writing it to the list?
    Situation is: I have quite complex report to rewrite (with several lists, and complex header texts for each list), which uses this technique - write to internal table, after that loop at the table and use simple write statement. I would like to save my effort and time and to use a a possibility to write variables longer than 255 chars to the list - if there is any.
    So? Is there such a possibility?
    Any help would be highly appreciated.
    Many thanks in advance.
    Regards,
    Ivaylo Mutafchiev

    HI Ivaylo
    Below is from documenation:
    Creates a report with col columns per line.
    If the LINE-SIZE specification is missing, the line length corresponds to the current screen width. The system field SY-LINSZ contains the current line size for generating lists. The maximum width of a list is 1023 characters. You should keep lists to the minimum possible size to improve useability and performance (recommendation: LINE-SIZE < 132). For very wide lists (LINE-SIZE > 255), you should consult the notes for using LINE-SIZE
    greater than 255.
    Notes
    The specified LINE-SIZE must not appear in quotation marks.
    If the you want the report list (i.e. the output) to be printable, do not define a LINE-SIZE with a value greater than 132 because most printers cannot handle wider lists. <b>You cannot print lists wider than 255 characters at all using the standard print functions.</b> To print the contents of the lists, you need to write a special print routine that arranges the data in shorter lines (for example, using the PRINT ON addition in the NEW-PAGE statement.
    At the beginning of a new list level, you can set a fixed line width for the level using the ... LINE SIZE addition to the NEW-PAGE statement.
    Maybe the highlighted portion might be one reason for this behaviour.
    Kind Regards
    Eswar

  • String limitation error when viewing Xcelsius Dashboard embedded in Crystal

    Hello, I am running Crystal Reports 2008 version 12.2.9.698 and have embedded a swf file created in Xcelsius Enterprise 5.3.0.0 Build 12.3.0.670.
    My dashboard is embedded into the Group header for 'Division' and uses a crosstab within Crystal as it's data source.  When I try to view a specific division that has approximately 135 summary lines in the crosstab, I get the following error:
    'A string can be at most 65534 characters long.' 
    Then a portion of the code appears with the line 'rowString + toXMLRow(columnString)' highlighted.
    columnString := columnString + toXMLColumn(gridvalueat(curRow, curCol, 26));
    nAddedCols := nAddedCols + 1;
    if nAddedCols = maxCols then exit for;
    rowString := *rowString + toXMLRow(columnString);
    nAddedRows := nAddedRows + 1;
    if nAddedRows = maxRows then exit for;
    This is only happening on one division dashboard, all the others have significantly less lines.  Does either Crystal or Xcelsius have a limitation on the number of lines in a summary?
    Any suggestions on how to get around this issue? My row for the summary is a 4-digit number.
    Any and all help is greatly appreciated!

    Kevin, thank you for your reply to my issue. 
    I did see the resolution given in the Crystal Reports 2008 Help, however, this is a string that is being created by Xcelsius, not by me.  I am not sure why or if there is any way to break it up into smaller bites as the code/dashboards are working on smaller divisions of data.
    I guess the real question is...is there a limit to the summary lines that can be handled by either Xcelsius or Crystal when the two are combined.

  • Making one big String with the same char

    I need to generate a String which represents only one char n-times.
    Something like:
    String str = new String(char Source, int iRepeat)
    String str = new String('x', 5);
    str = 'xxxxx';
    Thanks in advance!

    public String createString(char c, int n) {
      StringBuffer sb = new StringBuffer();
      for ( int y=0; y <= n; y++ ) {
         sb.append(c);
      return sb.toString();
    }that should work.
    always use string buffers when youre appending text. when you change the value of a STRING object, the jvm actually creates a new string in memory, and just changes the reference to the new string (since each variable you declare as STRING is actually just a reference). this isnt a problem with small strings, but if you create a string thats fairly large, youll notice a huge performance difference. so, just use Strings for storing values, and StringBuffers for string values you plan on changing often.

  • Converting String containg \t to char

    I have a string with the value "\t". The tab symbol. How can I convert this to a char?
    I tried this, but it didn't work:
    String tab = "\\t";
    char[] chars = new char[5];
    tab.getChars(0, tab.length(), chars, 0);
    char tabchar = chars[0];
    But tabchar is always just equal to \
    Any ideas?
    Thanks,
    Tyso

    \\t - two chars (\ and t)
    \t - one char (tab (9))
    try this:
    String tab = "\t";
    char[] chars = new char[5];
    tab.getChars(0, tab.length(), chars, 0);
    char tabchar = chars[0];
    [\code]                                                                                                                                                                                                                                                                                                                                                                                           

  • ABAP Limited Number of CHAR in File

    Hi All,
    I am writing txt data to a flat file and it appears I am not able to print more than 616 characters.  Is their a way to expand the line so I can write more than 616 characters?
    Regard,
    - Helen

    This how my data is defined and the code below shows how the data is processed.
    TYPES:
    BEGIN OF t_final,
             pernr(4)          TYPE c,
             tab1(1)           TYPE c,
             mrms(1)           TYPE c,
             tab2(1)           TYPE c,
             tab51(1)          TYPE c,
             wrkcompcd         TYPE t5u25-wccode,
             tab52(1)          TYPE c,
    END OF t_final.
    DATA:
    gt_final        TYPE STANDARD TABLE OF t_final       WITH HEADER LINE
                                                          INITIAL SIZE 0,   
    w_final         TYPE t_final,
    MOVE STATEMENTS TO POPULATE DATA, there are a lot so this is what they look like.
    MOVE gt_pa0001-pernr+4(4) to w_final-pernr.
    MOVE 'MID'               to w_final-mid.
    MOVE 'WC'                to w_final-wrkcompcd.
    APPEND w_final to gt_final.
    SORT gt_final ascending by pernr.
    LOOP at gt_final INTO w_final.
      TRANSFER w_final TO p_fileo LENGTH 1000.
    ENDLOOP.
    - Helen

  • Using bytes or chars for String phonetic algorithm?

    Hi all. I'm working on a phonetic algorithm, much like Soundex.
    Basically the program receives a String, read it either char by char or by chunks of chars, and returns its phonetic version.
    The question is which method is better work on this, treating each String "letter" as a char or as a byte?
    For example, let's assume one of the rules is to remove every repeated character (e.g., "jagged" becomes "jaged"). Currently this is done as follows:
    public final String removeRepeated(String s){
                    char[] schar=s.toCharArray();
              StringBuffer sb =new StringBuffer();
              int lastIndex=s.length()-1;
              for(int i=0;i<lastIndex;i++){
                   if(schar!=schar[i+1]){
                        sb.append(schar[++i]);//due to increment it wont work for 3+ repetions e.g. jaggged -> jagged
              sb.append(schar[lastIndex]);
              return sb.toString();
    Would there be any improvement in this computation:public final String removeRepeated(String s){
              byte[] sbyte=s.getBytes();
              int lastIndex=s.length()-1;
              for(int i=0;i<lastIndex;i++){
                   if(sbyte[i]==sbyte[i+1]){
                        sbyte[++i]=32; //the " " String
              return new String(sbyte).replace(" ","");
    Well, in case there isn't much improvement from the short(16-bit) to the byte (8-bit) computation, I would very much appreciate if anyone could explain to me how a 32-bit/64-bit processor handles such kind of data so that it makes no difference to work with either short/byte in this case.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

    You may already know that getBytes() converts the string to a byte array according to the system default encoding, so the result can be different depending on which platform you're running the code on. If the encoding happens to be UTF-8, a single character can be converted to a sequence of up to four bytes. You can specify a single-byte encoding like ISO-8859-1 using the getBytes(String) method, but then you're limited to using characters that can be handled by that encoding. As long as the text contains only ASCII characters you can get away with treating bytes and characters as interchangeable, but it could turn around and bite you later.
    Your purpose in using bytes is to make the program more efficient, but I don't think it's worth the effort. First, you'll be constantly converting between {color:#000080}byte{color}s and {color:#000080}char{color}s, which will wipe out much of your efficiency gain. Second, when you do comparisons and arithmetic on {color:#000080}byte{color}s, they tend to get promoted to {color:#000080}int{color}s, so you'll be constantly casting them back to {color:#000080}byte{color}s, but you have to watch for values changing as the JVM tries to preserve their signs.
    In short, converting the text to bytes is not going to do anywhere near enough good to justify the extra work it entails. I recommend you leave the text in the form of {color:#000080}char{color}s and concentrate on minimizing the number of passes you make over it.

  • Comparing char in a string to strings in a txt file

    Hi guys, i am dveloping a scrabble application for a project in jvava. Currently, i am trying to work on coding a computer player to play against a human, ive finished all the game logic nd 2 human players can successfully play on the same system.
    My problem is when coming up with the AI logic, i am faced with the problem of how to compare the computer player's letters to the dictionary txt file in order to find the possible words he can play.
    For example, the PC player has the letters A,B,E,G,T,F in his rack, it searches the dictionary and finds words that also contain these characters, so it would return words like AT, BAT, GATE, etc. I have already looke up the Jumble algorithm, but i dont really understand it(im still quite new to java).
    I already have a ditionary class which i put the code below.
    What i want to do now is just to come up with a simple method that takes a string, and compares the chars, and find words that match the char and return them but i dont knw hw to come about it.
    import java.util.Scanner;      
    import java.io.IOException;  
    import java.util.ArrayList;   
    import java.io.*;             
    public class Dictionary
        ArrayList<String> dictionary;
        public Dictionary() throws IOException
            dictionary = new ArrayList<String>();
        public void readInDictionaryWords() throws IOException
            File dictionaryFile = new File("c:/data/dict.txt");    // declare the file
            if( ! dictionaryFile.exists()) {
                System.out.println("*** Error *** \n" +
                                   "Your dictionary file has the wrong name or is " +
                                   "in the wrong directory.  \n" +
                                   "Aborting program...\n\n");
                System.exit( -1);    // Terminate the program
            Scanner inputFile = new Scanner( dictionaryFile);
            while( inputFile.hasNext()) {
                dictionary.add( inputFile.nextLine().toUpperCase() );
        public boolean wordExists( String wordToLookup)
            if( dictionary.contains( wordToLookup)) {
                return true;    // words was found in dictionary
            else {
                return false;   // word was not found in dictionary
        return"";
    }

    Loops...
    You take the first
    then second
    then third
    and etc
    You take the first 2
    the next 2
    the next 2
    etc
    all the way through n characters
    once you have gone through this, then you have to do all possible combinations of characters of 2 through n.
    Here is an implementation of N choose k for k up to 7:
    public class Junk {
      public Junk(){
      public void choose1(String s){
        int lCount=0;
        for(int i=0; i<s.length(); i++){
          System.out.println("("+s.charAt(i)+")");
          lCount++;
        System.out.println("Distinct Combinations: "+lCount);
      public void choose2(String s){
        int lCount=0;
        for(int i=0; i<s.length(); i++){
          for(int j=i+1; j<s.length(); j++){
              System.out.println("("+s.charAt(i)+", "+s.charAt(j)+")");
              lCount++;
        System.out.println("Distinct Combinations: "+lCount);
      public void choose3(String s){
        int lCount=0;
        for(int i=0; i<s.length(); i++){
          for(int j=i+1; j<s.length(); j++){
            for(int k=j+1; k<s.length(); k++){
              System.out.println("("+s.charAt(i)+", "+s.charAt(j)+", "+s.charAt(k)+")");
              lCount++;
        System.out.println("Distinct Combinations: "+lCount);
      public void choose4(String s){
        int lCount=0;
        for(int i=0; i<s.length(); i++){
          for(int j=i+1; j<s.length(); j++){
            for(int k=j+1; k<s.length(); k++){
              for(int l=k+1; l<s.length(); l++){
                System.out.println("("+s.charAt(i)+", "+s.charAt(j)+", "+s.charAt(k)+", "+s.charAt(l)+")");
                lCount++;
        System.out.println("Distinct Combinations: "+lCount);
      public void choose5(String s){
        int lCount=0;
        for(int i=0; i<s.length(); i++){
          for(int j=i+1; j<s.length(); j++){
            for(int k=j+1; k<s.length(); k++){
              for(int l=k+1; l<s.length(); l++){
                for(int m=l+1; m<s.length(); m++){
                  System.out.println("("+s.charAt(i)+", "+s.charAt(j)+", "+s.charAt(k)+", "+s.charAt(l)+", "+s.charAt(m)+")");
                  lCount++;
        System.out.println("Distinct Combinations: "+lCount);
      public void choose6(String s){
        int lCount=0;
        for(int i=0; i<s.length(); i++){
          for(int j=i+1; j<s.length(); j++){
            for(int k=j+1; k<s.length(); k++){
              for(int l=k+1; l<s.length(); l++){
                for(int m=l+1; m<s.length(); m++){
                  for(int n=m+1;n<s.length(); n++){
                    System.out.println("("+s.charAt(i)+", "+s.charAt(j)+", "+s.charAt(k)+", "+s.charAt(l)+", "+s.charAt(m)+", "+s.charAt(n)+")");
                    lCount++;
        System.out.println("Distinct Combinations: "+lCount);
      public void choose7(String s){
        int lCount=0;
        for(int i=0; i<s.length(); i++){
          for(int j=i+1; j<s.length(); j++){
            for(int k=j+1; k<s.length(); k++){
              for(int l=k+1; l<s.length(); l++){
                for(int m=l+1; m<s.length(); m++){
                  for(int n=m+1; n<s.length(); n++){
                    for(int o=n+1; o<s.length(); o++){
                      System.out.println("("+s.charAt(i)+", "+s.charAt(j)+", "+s.charAt(k)+", "+s.charAt(l)+", "+s.charAt(m)+", "+s.charAt(n)+", "+s.charAt(o)+")");
                      lCount++;
        System.out.println("Distinct Combinations: "+lCount);
      public static void main(String[] args) {
        Junk j = new Junk();
        j.choose7("1234567");
    }I'll leave it to you to integerate the algos into your app appropriately.

Maybe you are looking for