2016-08-12 2 views
1

Datei ich auf einem Fall arbeite, wo ich CSV-Datei mit folgenden DatenCamel aufgeteilt CSV auf regex

100| Some Delimited Data 
200| Some Delimited Data 
100| Some Delimited Data 
400| Some Delimited Data 
400| Some Delimited Data 
200| Some Delimited Data 

Ich versuche, muß Kamel Weg zu machen, wo

when 100 
    marshal csv & send to Bean 
when 200 
    marshal csv & send to bean 

ich zu routen versuchen es mit Kamel. Beispiel, wenn ich in XML tun kann ich XML in Route analysiert

ich nicht Camel-Bindy verwenden kann, wie ich es nicht Begrenzer in Reihe fixierte

Beispiel

Row 1 can have 10 '|' (pipes/delimiter) 
Row 2 can have 20 '|' (pipes/delimiter) 
Row 3 can have 16 '|' (pipes/delimiter) 

Sie sind in der Länge variabel was ich in Bean behandelt habe. Gibt es eine Möglichkeit, wo ich eine Regex analysieren oder verwenden kann?

+0

Was meinen Sie mit "Ich habe keine festen Trennzeichen in Zeile"? Könnten Sie bitte ein konkreteres Beispiel für Ihre CSV-Datei angeben? –

+0

Ihr Beispiel nicht wirklich helfen :) Sie Bedeuten diese Zeile zu sagen 1 10 Spalten mit 'getrennt hat |' und Zeile 2 20 Spalten getrennt durch '|'? Verwenden Sie immer das Pipe-Zeichen als Trennzeichen? –

+0

Ich bin mit '|' (Rohr) als Trennzeichen, zur Zeit, was ich tue in xml marshelling & dann xparse tun – Ashish

Antwort

2

Da Sie immer | als Trennzeichen verwenden, können Sie die default CSV support verwenden können, um den Inhalt als eine Liste von Listen zu laden, teilen dann den Körper jede Zeile als eine Liste zu bekommen und dann diese Liste bearbeiten (Zeile) in Ihrem Bean:

<unmarshal> 
    <csv delimiter="|"/> 
</unmarshal> 
<split> 
    <simple>${body}</simple> <!-- Body will be a list of lists --> 
    <choice> 
     <when> 
      <simple>${body[0]} == '100'</simple> 
      <to uri="bean:processor100"/> 
     </when>   
     <when> 
      <simple>${body[0]} == '200'</simple> 
      <to uri="bean:processor200"/> 
     </when> 
    </choice> 
</split> 
Verwandte Themen