AW: Cut file

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

AW: Cut file

Jan Matèrne (jhm)
Maybe as starting point ...

Jan


package de.materne.example.camel.custom_splitter;

import org.apache.camel.EndpointInject;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.Produce;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.RoutesBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.processor.aggregate.UseLatestAggregationStrategy;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;


public class SplitterTest extends CamelTestSupport {
       
        @EndpointInject(uri = "mock:result")
    protected MockEndpoint resultEndpoint;
 
    @Produce(uri = "direct:start")
    protected ProducerTemplate template;
 
       
        @Test
        public void test() throws InterruptedException {
                resultEndpoint.expectedMessageCount(2);
                template.sendBody(testdata());
                assertMockEndpointsSatisfied();
        }

        @Override
        protected RoutesBuilder createRouteBuilder() throws Exception {
                return new RouteBuilder() {
                        @Override
                        public void configure() throws Exception {
                                from("direct:start")
       
.split(bodyAs(String.class).tokenize("\n"))
                                        .process( (exchange) ->
exchange.getIn().setHeader(
                                                "orderNr",
       
exchange.getIn().getBody(String.class).split(" ")[1].trim())
                                        )
                                        .aggregate(header("orderNr"), new
UseLatestAggregationStrategy()).completionInterval(100)
                                        .to("mock:result");
                        }
                };
        }
       
        private String testdata() {
                return "11886 1855 0000004309000\n"
                         + "11886 1855 0000057370000\n"
                         + "11886 1856 0000057374001\n"
                         + "11886 1856 0000057375000\n";
        }
       
}


> -----Ursprüngliche Nachricht-----
> Von: Louisa [mailto:[hidden email]]
> Gesendet: Mittwoch, 3. August 2016 16:37
> An: [hidden email]
> Betreff: Cut file
>
> 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-tp5785993.html
> Sent from the Camel Development mailing list archive at Nabble.com.