Were you able to get this to work?

On Wed, Aug 3, 2016 at 4:30 PM, Brad Johnson <brad.john...@mediadriver.com>
wrote:

> Definitely the easiest way to do this is to create a simple bean an
> marshal the text.  I don't know how many fields you have if it is just the
> three or not but essentially if you create small Java bean you can
> unmarshall the split content into a bean, ask it for the identifier file
> and set that to the header "fileName" or any other variable you might want
> to use, marshall it back into text and then write it out to the fileName by
> appending.  I put .txt on the end but you could do whatever you want.
>
> from("file:/inbox").split(body()).unmarshal(dataFormat).
> setHeader("fileName",simple("${body.identifier}")).marshal(
> dataFormat).to("file:/outbox/?fileName=${header.fileName}.
> txt&fileExist=Append")
>
> That's done without an IDE so the likelihood of it running directly is
> low. But the idea is right.  It reads the file, splits the lines, unmarshal
> into the bean so you can access the fields and use the bean to tell you
> what the file name should be and then append to it.  So you don't have to
> have a sorted list and you don't have to  know how many orders there are in
> adavance. The dataFormat can be Bindy, Beanio or any other suitable format
> reader.  The only thing I didn't show there was marshaling it out and
> assume in this case a toString on the bean to write out the proper format.
> But you can do it anyway you'd like.
>
> http://camel.apache.org/file2.html
> http://camel.apache.org/beanio.html
>
> On Wed, Aug 3, 2016 at 4:08 PM, Brad Johnson <brad.john...@mediadriver.com
> > wrote:
>
>> Hang on let me rewrite I misread to think you were looking for  static
>> field.s
>>
>> On Wed, Aug 3, 2016 at 4:07 PM, Brad Johnson <
>> brad.john...@mediadriver.com> wrote:
>>
>>> In your route builder do something like follows.
>>>
>>> from("file:/inbox").split(body())
>>> .choice(when(
>>> //use a filter or a simple expression to check to see if 1855 is present
>>> in the record/line and write it out.
>>> .to("file:outbox/1855/...append..
>>> //end the when
>>> //otherwise write to 1856 or do a second when for 1856 and then write it
>>> out and use otherwise to write out an error message.
>>>
>>> The "when" can use a simple expression or you can create a Java bean and
>>> call it to check if the record is an 1855.  I'm not sure what you are
>>> ultimately doing with these but you may want to read these into data beans
>>> using something like the Camel Beanio component and then you could actually
>>> have a method right on the bean to return a Boolean if it is an 1855 or
>>> 1856.
>>>
>>>
>>> If you end up using Processors and Exchanges in the raw you probably
>>> should think of it as a code smell.  Unless you really have a very good
>>> idea of why you HAVE to use them they generally are unnecessary and mean
>>> you're doing things the hard way.  I don't recall the last time I had to
>>> use an actual Camel Exchange.
>>>
>>> Brad
>>>
>>> On Wed, Aug 3, 2016 at 1:30 PM, Louisa <lesgen...@hotmail.fr> wrote:
>>>
>>>> Hello everybody,
>>>>
>>>> I need your help. I use Talend ESB and I want to make java beans to cut
>>>> file.
>>>>
>>>> For example, I have this flat file:
>>>>
>>>>     11886 1855 0000004309000
>>>>     11886 1855 0000057370000
>>>>     11886 1856 0000057374001
>>>>     11886 1856 0000057375000
>>>>
>>>> In my example I want 2 files (messages), a filter of "1855" and "1856"
>>>> (It's
>>>> the number of orders).
>>>>
>>>> First file:
>>>>
>>>>     11886 1855 0000004309000
>>>>     11886 1855 0000057370000[/CODE]
>>>>
>>>> Second file:
>>>>
>>>>     11886 1856 0000057374001
>>>>     11886 1856 0000057375000[/CODE]
>>>>
>>>> But I don't know the number of orders per file (depending on the file).
>>>>
>>>> If i have three orders (three lines each) in my original file ==> I want
>>>> three files with the 3 lines of each order.
>>>>
>>>> If i have four orders in my original file ==> I want four files.
>>>>
>>>> If i have five orders in my original file ==> I want five files.
>>>>
>>>> and so on .......................
>>>>
>>>> This is my start but it return nothing:
>>>>
>>>> package beans;
>>>>
>>>>     import java.io.BufferedReader;
>>>>     import java.io.BufferedWriter;
>>>>     import java.io.ByteArrayInputStream;
>>>>     import java.io.File;
>>>>     import java.io.FileWriter;
>>>>     import java.io.IOException;
>>>>     import java.io.InputStream;
>>>>     import java.io.InputStreamReader;
>>>>     import java.util.HashMap;
>>>>     import java.util.Iterator;
>>>>     import java.util.Map;
>>>>     import java.util.Set;
>>>>     import java.util.TreeSet;
>>>>
>>>>     import org.apache.camel.*;
>>>>
>>>>
>>>>     public class bean_test implements Processor{
>>>>
>>>>         private static final String ENDPOINT = "aggregateEndpoint";
>>>>         private static final int NUMERO_SITE_START_POSITION = 46;
>>>>         private static final int NUMERO_SITE_END_POSITION = 55;
>>>>
>>>>
>>>>         @Override
>>>>         public void process(Exchange exchange) throws Exception {
>>>>
>>>>             ProducerTemplate producerTemplate =
>>>> exchange.getContext().createProducerTemplate();
>>>>             String endpoint = exchange.getIn().getHeader(ENDPOINT,
>>>> String.class);
>>>>             InputStream is = new
>>>> ByteArrayInputStream(exchange.getIn().getBody(String.class).
>>>> getBytes());
>>>>             aggregateBody(producerTemplate, is, endpoint, new
>>>> HashMap<String, Object>(exchange.getIn().getHeaders()));
>>>>
>>>>         }
>>>>
>>>>         private void aggregateBody(ProducerTemplate producerTemplate,
>>>> InputStream content, String endpoint, Map<String, Object> headers){
>>>>             BufferedReader br = new BufferedReader(new
>>>> InputStreamReader(content));
>>>>             String line;
>>>>             Set<String> order=new TreeSet<String>();
>>>>
>>>>             try {
>>>>                 String lineId = null;
>>>>                 while((line = br.readLine()) != null){
>>>>                     lineId = line.substring(NUMERO_SITE_START_POSITION,
>>>> NUMERO_SITE_END_POSITION);
>>>>                     order.add(lineId);
>>>>                 }
>>>>
>>>>                 for(int i=0;i<order.size();i++){
>>>>                     String key = "file" + i;
>>>>                     File F = new File(key);
>>>>                     Iterator it = order.iterator();
>>>>                     FileWriter fw = new FileWriter(F.getAbsoluteFile()
>>>> );
>>>>                     BufferedWriter bw = new BufferedWriter(fw);
>>>>
>>>>                     while((line = br.readLine()) != null){
>>>>                         while(it.hasNext()){
>>>>                             lineId =
>>>> line.substring(NUMERO_SITE_START_POSITION, NUMERO_SITE_END_POSITION);
>>>>                             if (lineId.equals(it.next())) {
>>>>                                 bw.write(line);
>>>>                             }
>>>>                         }
>>>>
>>>>                     }
>>>>                 }
>>>>
>>>>
>>>>             } catch (IOException e) {
>>>>                 e.printStackTrace();
>>>>             }
>>>>             finally{
>>>>                 try {
>>>>                     if(br != null)br.close();
>>>>                 } catch (IOException e) {
>>>>                     e.printStackTrace();
>>>>                 }
>>>>             }
>>>>         }
>>>>     }
>>>>
>>>> can you help me please ?
>>>>
>>>> Thank you in advance.
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context: http://camel.465427.n5.nabble.
>>>> com/Cut-file-tp5786003.html
>>>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>>>
>>>
>>>
>>
>

Reply via email to