Ant Beim zusammenfassen von CSV-Dateien nur bestimmt spalten auswählen

error404

Mitglied
Hallo,

ich mache zur Zeit Praktikum und habe eine Aufgabe bekommen, die mit ANT erfüllt werden soll.

Dabei soll ich CSV-Dateien zusammenfassen. Diese Dateien enthalten mehrere Sprachen(Deutsch, Französisch, Englisch, Italienisch usw.), die in einzelne Spalten unterteilt sind.

In der Aufgabe soll ich die CSV-Dateien so zusammenfassen, dass z.B. nur die Spalten für die Sprachen Sprachen Deutsch und Englisch in der neuen CSV-Datei sind.

Ist sowas mit den bereits vorhandenen ANT-Tasks möglich?

Ich habe über die Forumsuche und bei Google leider nichts geeignetes gefunden.


Gruß,
error
 

error404

Mitglied
Was hast Du denn probiert?

Gruß
Karl Heinz Marbaise

Bisher nur mit Concat. Dabei kann ich aber leider keine Spalten angeben

FilterChains and FilterReaders wäre evtl was für dich. Wie sehen die CSVs denn genau aus? Poste mal ein Beispiel.

Danke für den Link, werde es mal damit versuchen.

Hier aus Auszug aus einer von den Dateien.
Code:
labelKey;de_DE;en_GB;fr_FR;hu_HU;pl_PL;ro_RO;vn_VN;ru_RU;pt_PT;pt_BR;zh_CN
SAVE;Speichern;Save;Sauvegarder;Mentés;Zapisz;Salvare;Lưu ;Сохранить;Guardar;Guardar;保存
PLEASEWAIT;Die Suche wird ausgeführt - bitte haben Sie einen Moment Geduld!;Please wait...;Un moment svp...;Kérjük, várjon...;Proszę czekać…;Vă rugăm aşteptaţi...;Vui lòng đợi...;Пожалуйста, подождите...;Espere por favor...;Espere por favor...;请等待...
PARAMETERSMISSING;Fehlende Parameter;Parameters missing;Manque de paramètre;Hiányzó paraméterek;Brakuje parametrów;Parametri lipsă;Thiếu tham số;Отсутствуют параметры;Falta de parâmetros ;Falta de parâmetros ;参数丢失
PLEASELOGIN;Bitte melden Sie sich an.;Please Login;Veuillez vous loguer;Kérjük, jelentkezzen be;Zaloguj się;Vă rugăm să intraţi în cont;Vui lòng đăng nhập;Пожалуйста, войдите;Registe-se por favor;Registe-se por favor;请登录
POSTV;POSTV;POSTV;POSTV;POSTV;POSTV;POSTV;POSTV;POSTV;POSTV;POSTV;POSTV
PREVIEW;Vorschau;Preview;Aperçu;Előnézet;Podgląd;Previzualizare;Xem trước;Предварительный просмотр;Antevisão;Antevisão;预览

Vielleicht seht ihr ja ob es damit geht
 

error404

Mitglied
Leider bin ich mit den Filtern noch nicht weitergekommen.

Ich habe es damit zwar hinbekommen, dass die Spaltenüberschriften der anderen CSV-Dateien nicht angezeigt werden aber das herausfiltern der einzelnen Spalten kriege ich mit den Filtern nicht hin, da alles auf Lines getrimmt ist und nicht auf Columns, die ich für meinen Zweck benötige.

Hat jemand noch einen Tipp wie ich das lösen kann?

Die CSV-Datei im vorherigen Beitrag ist auch nur ein Auszug. Diese hat eigentlich über 900 Zeilen.
 

error404

Mitglied
DE und EN sollen immer vorhanden sein. Jedoch wird auch hin und wieder mal Vn benötigt oder auch zh_CN.

Erweiterungen wie Ant-Contrib darf ich bestimmt auch benutzen. Mir wird da sehr viel Spielraum gelassen.

Ich habe auch Ansprechpartner hier, die sich mit Ant auskennen. Aber leider haben die noch nie CSV-Dateien zusammengefasst.
 
G

Gast2

Gast
Okay, wenn du Ant Erweiterungen nutzen kannst ist die Sache einfach.

Du programmiserst dir einfach eine eigene Filter Klasse ;)
 
G

Gast2

Gast
Hab es gestern nicht mehr geschafft, dafür dann heute. Ist nur fix runtergehackt, also kann man bestimmt noch verschönern und finetunen, aber es funktioniert. Hier der Code für den Task:

Java:
package org.antexample;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

public class ColumnFilter extends Task {

	String inputFile;
	String separator = ";";
	String outputFile;
	String locales;

	public void setInputFile(String inputFile) {
		this.inputFile = inputFile;
	}

	public void setSeparator(String separator) {
		this.separator = separator;
	}

	public void setOutputFile(String outputFile) {
		this.outputFile = outputFile;
	}

	public void setLocales(String locales) {
		this.locales = locales;
	}

	private Map<String, Column> columnsByName = new HashMap<String, Column>();
	private Map<Integer, Column> columnsByNumber = new HashMap<Integer, Column>();
	private Column labelColumn;
	private String[] localColumns;

	public static void main(String[] args) {
		ColumnFilter c = new ColumnFilter();
		c.execute();

	}

	@Override
	public void execute() throws BuildException {
		localColumns = locales.split(",");
		List<String> lines = readFile(new File(inputFile));
		processLines(lines);
		writeFile(new File(outputFile));
	}

	private void processLines(final List<String> lines) {
		parseHeaderLine(lines);
		for (int i = 1; i < lines.size(); i++) {
			parseLine(lines.get(i));
		}

	}

	private void parseLine(final String line) {
		String[] cols = line.split(separator);
		for (int i = 0; i < cols.length; i++) {
			columnsByNumber.get(i).add(cols[i]);
		}
	}

	private void parseHeaderLine(final List<String> lines) {
		String headerLine = lines.get(0);
		String[] cols = headerLine.split(separator);
		labelColumn = new Column(0, cols[0]);
		columnsByName.put(cols[0], labelColumn);
		columnsByNumber.put(0, labelColumn);
		for (int i = 1; i < cols.length; i++) {
			Column c = new Column(i, cols[i]);
			columnsByName.put(cols[i], c);
			columnsByNumber.put(i, c);
		}
	}

	private void writeFile(final File file) {
		try {
			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(file)));

			List<Column> columns = new ArrayList<Column>();
			columns.add(labelColumn);

			for (String locale : localColumns) {
				columns.add(columnsByName.get(locale));
			}

			int rows = 0;
			StringBuilder sb = new StringBuilder();
			for (Column c : columns) {
				sb.append(c.getLocale());
				sb.append(separator);
				if (rows < c.size()) {
					rows = c.size();
				}
			}
			String header = sb.toString();
			header = header.substring(0, header.length() - 1);

			out.write(header);
			out.newLine();

			for (int i = 1; i <= rows; i++) {
				sb = new StringBuilder();
				for (Column c : columns) {
					sb.append(c.get(i));
					sb.append(separator);
				}
				String line = sb.toString();
				line = line.substring(0, line.length() - 1);

				out.write(line);
				out.newLine();
			}

			out.close();
		} catch (Exception e) {
			throw new BuildException("Could not write to file "
					+ file.getAbsolutePath(), e);
		}
	}

	private List<String> readFile(final File file) throws BuildException {
		List<String> lines = new ArrayList<String>();
		try {
			BufferedReader reader = new BufferedReader(new FileReader(file));
			String line = null;
			while ((line = reader.readLine()) != null) {
				lines.add(line);
			}
		} catch (Exception e) {
			throw new BuildException("Cannot read input file "
					+ file.getAbsolutePath(), e);
		}
		return lines;
	}
}

final class Column {
	final int number;
	final String locale;
	final Map<Integer, String> rows;

	public Column(int number, String locale) {
		this.number = number;
		this.locale = locale;
		rows = new HashMap<Integer, String>();
	}

	public void add(String rowContent) {
		add(rows.size() + 1, rowContent);
	}

	public void add(int rowNumber, String rowContent) {
		rows.put(rowNumber, rowContent);
	}

	public int size() {
		return rows.size();
	}

	public String get(int rowNumber) {
		return rows.get(rowNumber);
	}

	public int getNumber() {
		return number;
	}

	public String getLocale() {
		return locale;
	}

	public Map<Integer, String> getRows() {
		return rows;
	}

	public String toString() {
		StringBuilder sb = new StringBuilder(number + ": " + locale + "\n");
		for (int rowIdx : rows.keySet()) {
			sb.append(rows.get(rowIdx));
			sb.append("\n");
		}
		return sb.toString();
	}

}


Das ganze dann als jar einfach exportieren und im build File einbinden. Z.B.:

[XML]
<?xml version="1.0"?>

<project name="AntColumnFilterExamle" default="main" basedir=".">

<taskdef name="columnFilter" classname="org.antexample.ColumnFilter" classpath="./lib/AntColumnFilter.jar"/>

<target name="main">
<columnFilter
inputFile = "test.csv"
outputFile = "out.csv"
separator = ";"
locales = "de_DE,fr_FR,ro_RO"
/>
</target>

</project>
[/XML]

Ich habe auch mal das Eclipse Project angehängt. Kannst du einfach so in Eclipse importieren, musst dir nur noch die ant.jar in das lib Verzeichnis kopieren. (war zu groß für den Anhang hier).
 

Anhänge

  • AntColumnFilter.jar
    4,3 KB · Aufrufe: 2
  • AntTaskTest.zip
    13,2 KB · Aufrufe: 1

error404

Mitglied
Vielen Dank nochmal.

Ich find es echt super wenn man so eine Hilfe bekommt :toll:

werde es Montag mal ausprobieren und mich dann nochmal melden.
 

error404

Mitglied
Kann ich damit auch mehrere Dateien gleichzeitig zusammenfassen oder muss ich erst zusammenfassen und dann Filtern?

EDIT:
Ich habe gerade versucht die Klasse in meinem Projekt zu verwenden. Dabei krieg ich aber die Meldung, dass "org.antexample.ColumnFilter" nicht gefunden wird. Muss ich noch irgendwas ändern wenn ich die Klasse in einem anderen Projekt verwenden möchte?

EDIT2:
Lag an einer falschen Pfadangabe. Das Problem ist also schon mal behoben
 
Zuletzt bearbeitet:

error404

Mitglied
Der Filter funktioniert soweit ganz gut, nur sobald in der CSV-Datei HTML-Tags(in dem Auszug Zeile 9-11) vorkommen macht der nichts und zeigt mir als Fehler einen Nullpoint.

Hier noch ein Auszug.
Code:
labelKey;de_DE;en_GB;fr_FR;hu_HU;pl_PL;ro_RO;vn_VN;ru_RU;pt_PT;pt_BR;zh_CN;
PIM_PRICELIST;Preisliste;Price List;Liste des prix;Árlista;Cennik;Listă preţuri;Danh Sách Giá;Прайс-лист;Lista de preços;Lista de preços;价格表;
PIM_PRODUCTIMAGE;Produktabbildung;Product Image;Image du produit;Termék képe;Zdjęcie produktu;Imagine produs;Hình Ảnh Sản Phẩm;Изображение товара;Imagem do produto;Imagem do produto;产品图片;
PRODUCT;Produkt;Product;Produit;Termék;Produkt;Produs;Sản phẩm;Товар;Produto;Produto;产品;
PIM_ORDER_SUBMISSION;Ihre Auftragsdaten wurden übermittelt.;Order transfer;§§ not available §§;Megrendelés továbbítása;Przesyłanie zamówienia;Transfer comandă;Chuyển Đơn Đặt Hàng;Размещение заказа;Transferência de pedido;Transferência de pedido;订单转发;
PIM_ORDER_SUBMISSION_SUCCESS_MESSAGE;Vielen Dank. Ihre Auftragdaten wurden übermittelt.;Your order details have been transferred.;Votre ordre est transmit;A megrendelés részleteit továbbítottuk.;Szczegóły zamówienia zostały przesłane.;Detaliile comenzii dvs. au fost transferate.;Các chi tiết về đơn đặt hàng của bạn đã được chuyển.;Ваш заказ размещен.;Os detalhes do seu pedido foram transferidos.;Os detalhes do seu pedido foram transferidos.;您的详细订单已经转发。;
PIM_ORDER_SUBMISSION_WAIT_MESSAGE;Ihre Daten werden übermittelt. Bitte haben Sie Geduld.;Please wait until your details have been transferred.;Veuillez attendre que vos données soient transferts.;Kérjük, várjon a részletek továbbításáig.;Proszę czekać na przesłanie szczegółów zamówienia.;Vă rugăm aşteptaţi până ce detaliile dvs.  au fost transferate.;Vui lòng chờ cho đến khi các chi tiết của bạn đã được chuyển.;Пожалуйста, дождитесь размещения Вашего заказа.;Por favor espere até os detalhes terem sido transferidos.;Por favor espere até os detalhes terem sido transferidos.;请等到详细订单转发完毕。;
PAIA_FRONTEND_MYPROFILE;Benutzerprofil;User profile;Mon profil;Felhasználói profil;Profil użytkownika;Profil utilizator;Hồ Sơ Người Dùng;Профиль пользователя;Perfil de utilizador;Perfil de utilizador;用户简介;
PIM_PRODUCT_CODE_DESCRIPTION;"<b>GTIN</b> (=Global Trade Item Number, ehemals EAN) ist der <b>ARTIKEL-CODE</b>, der Verbrauchern durch seine Verwendung an den Scannerkassen des Handels bekannt ist. Der GTIN gibt <u>Auskunft über den Hersteller und den Artikel</u>. Gleiche Artikel haben identische GTIN Codes. GTIN-Nummern haben 8,12,13 oder 14 Stellen, Varianten können länger und alphanumerisch sein.<br><br><b>Geben Sie alle Zeichen inklusive Sonderzeichen ein.</b><br>Beispiele: <br>""01234565"", „12345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";"<b>GTIN</b> (=Global Trade Item Number, previously known as EAN) is the <b>ARTICLE CODE</b> most commonly used at retail check-out. <u>It defines the manufacturer as well as the SKU of the article</u>. That is why identical articles have identical GTIN codes. GTIN numbers have either 8,12,13 or 14 digits, but there exist variants with more digits and in alphanumerical format.<br><br><b>Enter all digits as imprinted with the GTIN code.</b> <br>Examples:<br>""01234565"", i2345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";"<b>Le GTIN</b> (= Global  Item  Number,  précédemment EAN) est  le <b>CODE D'ARTICLE</b> que les consommateurs connaissent car on l’utilise au scanner des caisses dans le commerce. Le code-barre du GTIN <u>donne des renseignements sur le fabricant et l'article</u>. Les articles identiques ont des codes GTIN identiques. Les chiffres  GTIN comptent 8, 12, 13 ou 14 caractères, mais il existent des variantes plus longues et alphanumériques. <br><br><b>Entrez tous les caractères imprimés avec le code GTIN.</b> Exemples: <br>""01234565"", „12345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";<b>GTIN</b> (=Globális Kereskedelmi Áruazonosító Szám, korábban EAN) a boltok pénztárainál leggyakrabban használt <b>CIKKSZÁM</b>mal kapcsolatban lehet ismerõs. <u>A kód mind a gyártót, mind magát a terméket azonosítja</u>;" ez az oka, hogy az azonos árucikkek GTIN-száma is azonos. A GTIN-számok 8, 12, 13 vagy 14 számjegybõl állhatnak, de ennél több számjegybõl álló, illetve betõket is tartalmazó változatok is léteznek.<br><br><b>Adja meg a nyomtatott GTIN-kód összes jegyét.</b> <br>Példák:<br>""""01234565"""", „12345678905"""", „(01)10384478861804"""", „(01)04012345678901(21)ABCDEFG123456789""";<b>GTIN</b> (= Globalny Numer Jednostki Handlowej, wywodzący się z Europejskiego Kodu Towarowego EAN) jest najczęściej stosowanym <b>KODEM PRODUKTU</b> przy kasach w punktach sprzedaży detalicznej. <u>Określa on producenta oraz jednostkę magazynową SKU artykułu</u>. Z tego powodu niektóre artykuły mogą mieć identyczne kody GTIN. Numery GTIN mogą posiadać 8,12,13 lub 14 cyfr, jednak istnieją warianty mające większą liczbę cyfr oraz formaty alfanumeryczne.<br><br><b>Wprowadź wszystkie cyfry kodu GTIN.</b> <br>Przykłady:<br>„01234565”, „12345678905”, „(01)10384478861804”, „(01)04012345678901(21)ABCDEFG123456789”;"<b>GTIN</b> (=Număr global de articol comercial, numit înainte EAN) este <b>CODUL DE ARTICOL</b> cel mai des folosit în momentul verificării de retail. <u>Defineşte producătorul, cât şi SKU-ul articolului (SKU =unitate de stoc)</u>. De aceea articole identice au coduri GTIN identice. Numerele GTIN au fie 8, 12, 13 sau 14 cifre, însă există variante cu mai multe cifre şi în format alfanumeric.<br><br><b>Introduceţi toate cifrele aşa cum sunt înscrise în codul GTIN.</b> <br>Exemple:<br>""""01234565"""", ä12345678905"""", """"(01)10384478861804"""", """"(01)04012345678901(21)ABCDEFG123456789""";"<b>GTIN</b> (=Mã Số Mục Thương Mại Toàn Cầutrước kia được biết đến như là EAN) là <b>MÃ HÀNG</b> được dùng nhiều nhất ở quầy thu tiền bán lẻ. <u>Nó định nghĩa nhà sản xuất cũng đồng thời là SKU của món hàng</u>. Đó là lý do tại sao những món hàng giống hệt nhau có các mã GTIN giống nhau. Mã số GTIN có 8 12 13 hoặc 14 chữ số nhưng tồn tại các biến thể có nhiều chữ số hơn và ở định dạng chữ và số.<br><br><b>Nhập tất cả các chữ số như được in với mã GTIN.</b> <br>Ví dụ:<br>""""01234565"""" E2345678905"""" """"(01)10384478861804"""" """"(01)04012345678901(21)ABCDEFG123456789""";"<b>GTIN</b> (=глобальный номер товарной позиции, ранее известный как EAN) это <b>КОД ТОВАРА</b>, наиболее часто используемый  в розничной торговле. <u>По нему можно определить производителя и артикул товара</u>. Поэтому идентичные товары имеют идентичный GTIN. Он состоит из 8,12,13 или 14 цифр, также бывают варианты с большим числом цифр и в буквенно-цифровом формате.<br><br><b>Введите все цифры, указанные в GTIN.</b> <br>Примеры:<br>""01234565"", ı2345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";"<b>GTIN</b> (=Global Trade Item Number, Identificador Global de Item Comercial, anteriormente conhecido como EAN) é o <b>CÓDIGO DE ARTIGO</b> mais utilizado nos pontos de venda. <u>Identifica a empresa fabricante bem como o SKU (Unidade de Manutenção de Estoque) do produto</u>. Por isso, produtos idênticos têm códigos GTIN idênticos. Códigos GTIN têm 8,12,13 ou 14 dígitos, mas existem variantes com mais dígitos e em formato alfanumérico.<br><br><b>Introduza todos os dígitos presentes no código GTIN.</b> <br>Exemplos:<br>""01234565"", i2345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";"<b>GTIN</b> (=Global Trade Item Number, Identificador Global de Item Comercial, anteriormente conhecido como EAN) é o <b>CÓDIGO DE ARTIGO</b> mais utilizado nos pontos de venda. <u>Identifica a empresa fabricante bem como o SKU (Unidade de Manutenção de Estoque) do produto</u>. Por isso, produtos idênticos têm códigos GTIN idênticos. Códigos GTIN têm 8,12,13 ou 14 dígitos, mas existem variantes com mais dígitos e em formato alfanumérico.<br><br><b>Introduza todos os dígitos presentes no código GTIN.</b> <br>Exemplos:<br>""01234565"", i2345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";"<b>GTIN</b> (=全球交易品号,以前称为 EAN) 是<b>货号</b>最常用于零售检查。 <u>GTIN 定义了制造商以及物品的 SKU</u>。因此相同物品具有相同的 GTIN 代码。 GTIN 号码具有 8、12、13 或 14 个数字,但是也有 GTIN 号码的数位更多以及采用字母格式。<br><br><b>输入 GTIN 代码打印的所有数字。</b> <br>实例:<br>""01234565""、""i2345678905""、""(01)10384478861804""、""(01)04012345678901(21)ABCDEFG123456789"""
PIM_PRODUCT_CATEGORY_DESCRIPTION;"<br><b>KATEGORIE:</b> Wählen Sie mittels des Filters die Produkt-Kategorie des zu prüfenden Produkts. <br><br>Ist <u>keine</u> passende Produkt-Kategorie vorhanden, wählen Sie bitte ""andere..."" . Senden Sie in diesem Fall <u>auf jeden Fall</u> eine Prüfanfrage an unsere Experten.";"<br><b>CATEGORY:</b> Click on Filter to SELECT the category of the product that you intend to test. <br><br>If <u>none</u> fits, select ""other"", ADD product details and SEND as an inquiry to the expert team.";<br><b>LA CATÉGORIE:</b> Veuillez choisir avec le filtre la catégorie du produit que vous  désirez vérifier. <br><br><u>Si aucune</u> catégorie ne convient, choisissez « autre ». <u>Dans ce cas présent</u>, veuillez absolument envoyer une demande de vérification à nos experts.;<br><b>KATEGÓRIA:</b> A Szőrésre kattintva jelölje ki az ellenőrizni kívánt termék kategóriáját. <br><br>Ha <u>egyik sem</u> illik rá, válassza az „egyéb” pontot, vegye fel a termék részleteit, és vizsgálati kérelemként küldje el szakértői csapatunknak.;<br><b>KATEGORIA:</b> Kliknij Filtr, aby WYBRAĆ kategorię produktu, którą chcesz sprawdzić. <br><br>Jeśli <u>żadna</u> kategoria nie odpowiada Twoim potrzebom, wybierz „Inna”, a następnie DODAJ opis produktu i WYŚLIJ zapytanie do naszego zespołu ekspertów.;"<br><b>CATEGORIE:</b> Faceţi clic pe Filtru pentru a SELECTA categoria produsului pe care intenţionaţi să-l testaţi. <br><br>Dacă nu se potriveşte <u>niciuna</u>, selectaţi ""alta"", ADĂUGAŢI detaliile produsului şi TRIMITEŢI o întrebare adresată echipei de experţi.";"<br><b>LOẠI:</b> Nhấp vào Lọc để CHỌN loại sản phẩm mà bạn định kiểm tra. <br><br>Nếu <u>không loại nào</u> phù hợpchọn ""khác"" THÊM các chi tiết sản phẩm và GỬI như một yêu cầu tới nhóm chuyên gia.";"<br><b>КАТЕГОРИЯ:</b> С помощью Фильтра ВЫБЕРИТЕ категорию товара, который хотите проверить. <br><br>Если <u>ни одна </u> не подходит, выберите ""другое"", ДОБАВЬТЕ описание товара и ВЫШЛИТЕ в качестве запроса экспертной команде.";"<br><b>CATEGORIA:</b> Clique no filtro para SELECCIONAR a categoria do produto que pretende testar. <br><br>Se <u>nenhuma das categorias disponíveis</u> for a pretendida, seleccione ""outra"", ADICIONE os detalhes do produto e ENVIE como inquérito à équipa de peritos.";"<br><b>CATEGORIA:</b> Clique no filtro para SELECCIONAR a categoria do produto que pretende testar. <br><br>Se <u>nenhuma das categorias disponíveis</u> for a pretendida, seleccione ""outra"", ADICIONE os detalhes do produto e ENVIE como inquérito à équipa de peritos.";<br><b>CATEGORY:</b> 单击过滤器,以便“选择”计划测试的产品种类。<br><br>如果 <u>没有</u> 适当选择,请选择“其他”,添加产品详情,并作为查询发送至专家团队。;
PIM_PRODUCT_BRAND_DESCRIPTION;"<br><b>MARKE:</b> Wählen Sie mittels des Filters die MARKE des zu prüfenden Produkts.<br><br>Ist <u>keine</u> passende Produkt-Kategorie vorhanden, wählen Sie bitte """"andere..."""" . Senden Sie in diesem Fall <u>auf jeden Fall</u> eine Prüfanfrage an unsere Experten.""";"<br><b>BRAND:</b> Click on Filter to select the BRAND of the product that you intend to test. <br><br>If <u>none</u> fits, select """"other"""", ADD product details and SEND as an inquiry to the expert team.""";<br><b>LA MARQUE:</b> Veuillez choisir avec le filtre la MARQUE du produit que vous désirez vérifier. <br><br><u>Si aucune</u> catégorie ne convient, choisissez «*autre*». Dans ce cas présent, veuillez <u>absolument envoyer une demande</u> de vérification à nos experts.;<br><b>MÁRKA:</b> A Szőrésre kattintva jelölje ki az ellenőrizni kívánt termék márkáját. <br><br>Ha <u>egyik sem</u> illik rá, válassza az „egyéb” pontot, vegye fel a termék részleteit, és vizsgálati kérelemként küldje el szakértői csapatunknak.;<br><b>MARKA:</b> Kliknij Filtr, aby wybrać MARKĘ produktu, którą chcesz sprawdzić. <br><br>Jeśli <u>żadna</u> marka nie odpowiada Twoim potrzebom, wybierz „Inna”, a następnie DODAJ opis produktu i WYŚLIJ zapytanie do naszego zespołu ekspertów.;"<br><b>MARCĂ:</b> Faceţi clic pe Filtru pentru a selecta MARCA produsului pe care intenţionaţi să-l testaţi. <br><br>Dacă nu se potriveşte <u>niciuna</u> , selectaţi ""alta"", ADĂUGAŢI detalile produsului şi TRIMITEŢI o întrebare adresată echipei de experţi.";"<br><b>THƯƠNG HiỆU:</b> Nhấp vào Lọc để chọn THƯƠNG HIỆU sản phẩm mà bạn định kiểm tra.  <br><br>Nếu <u>không loại nào</u> phù hợpchọn ""khác"" THÊM các chi tiết sản phẩm và GỬI như một yêu cầu tới nhóm chuyên gia.";"<br><b>ТОРГОВАЯ МАРКА:</b> CС помощь Фильтра выберите ТОРГОВУЮ МАРКУ товара, который хотите проверить. ><br>Если <u>ни одна</u> не подходит, выберите ""другое"", ДОБАВЬТЕ описание товара и ВЫШЛИТЕ в качестве запроса экспертной команде.""";"<br><b>MARCA:</b> Clique no filtro para SELECCIONAR a MARCA do produto que pretende testar. <br><br>Se <u>nenhuma das marcas disponíveis</u> for a pretendida, seleccione ""outra"", ADICIONE os detalhes do produto e ENVIE como inquérito à équipa de peritos.";"<br><b>MARCA:</b> Clique no filtro para SELECCIONAR a MARCA do produto que pretende testar. <br><br>Se <u>nenhuma das marcas disponíveis</u> for a pretendida, seleccione ""outra"", ADICIONE os detalhes do produto e ENVIE como inquérito à équipa de peritos.";<br><b>BRAND:</b> 单击过滤器,以便选择计划测试的产品“品牌”。 <br><br>如果<u>没有</u> 适当选择,请选择“其他”,“添加”产品详情,并作为查询“发送”至专家团队。”;
PAIA_FRONTEND_SELECT_LANGUAGE;Sprachauswahl;Choose your language;Votre langue préférée;Nyelv megadása;Wybierz język;Adăugaţi limba;Chọn ngôn ngữ của bạn;Выберите язык;Escolha a sua Língua;Escolha a sua Língua;选择语言;
PAIA_FRONTEND_LOGGED_IN_TEXT;Sie sind angemeldet als;You are logged in as;Vous êtes inscrits sous;Logged in as;Logged in as;Sunteţi logat ca;Bạn đã đăng nhập như là;Вы вошли как;Está registado(a),;Está registado(a),;按以下身份登录;
PAIA_FRONTEND_VERIFY_CODE;Prüfen;Verify;Valider;Kód ellenőrzése;Weryfikuj kod;Verificare cod;Xác Minh Mã;Проверить код;Verificar;Verificar;确认;
PAIA_FRONTEND_GENERAL_ACCORDEON_INFO;Eingabehilfe;Help;Aide;Súgó;Pomoc;Ajutor;Trợ giúp;Помощь;Ajuda;Ajuda;帮助;
PAIA_FRONTEND_GENERAL_ACCORDEON_CONTACTS;Ansprechpartner;Contact Person;Contact;Kapcsolattartó;Osoba kontaktowa;Persoana de contact;Người Liên Hệ;Контактное лицо;Pessoa de Contacto;Pessoa de Contacto;联系人;
PAIA_FRONTEND_CALLBACK_TITLE;Sie wollen mit einem Experten für diese Marke sprechen?;Do you need the help of an expert of this brand?;Avez-vous besoin du soutien d’un expert pour cette marque?;Szüksége van a márka szakértőjének segítségére?;Czy potrzebujesz pomocy eksperta tej marki?;Aveţi nevoie de ajutorul unui expert în această marcă?;Bạn có cần sự giúp đỡ của một chuyên gia của thương hiệu này không?;Нужна помощь эксперта марки?;Precisa da ajuda de um perito desta marca?;Precisa da ajuda de um perito desta marca?;您需要该品牌的专家帮助吗?
PAIA_FRONTEND_CALLBACK_DESCRIPTION_TEXT;Bitte geben Sie an, an welchem Tag und zu welcher Uhrzeit Sie telefonisch erreichbar sind.;Please specify preferred day and time.;Indiquez  svp  quel  jour  et  à quelle heure vous êtes joignable au téléphone.;Kérjük, adja meg a kívánt napot és időpontot.;Proszę określić preferowany dzień i godzinę.;Vă rugăm specificaţi ziua şi ora pe care le preferaţi.;Vui lòng chỉ rõ ngày và thời gian được được chọn.;Укажите предпочтительное время.;Especifique por favor o dia e a hora preferidos.;Especifique por favor o dia e a hora preferidos.;请指定首选日期和时间。
PAIA_FRONTEND_GENERAL_CATEGORY;Produkt-Kategorie;Product Category;Catégorie du produit;Termékkategória;Kategoria produktu;Categorie produs;Loại Sản Phẩm;Категория товара;Categoria do produto;Categoria do produto;产品种类
PAIA_FRONTEND_CALLBACK_CATEGORY_PROMPT;Auswahl Produkt-Kategorie;Select Product Category;Choix de catégorie de produit;Termékkategória kiválasztása;Wybierz kategorię produktu;Selectare Categorie produs;Chọn Loại Sản Phẩm;Выберите категорию товара;Seleccione a categoria do produto;Seleccione a categoria do produto;选择产品种类
PAIA_FRONTEND_GENERAL_BRAND;Marke;Brand;Marque;Márka;Marka;Marcă;Thương hiệu;Торговая марка;Marca;Marca;品牌

An welcher Stelle müsste ich die Java-Klasse modifizieren, damit auch diese Zeilen genommen werden?

Unser Java-Experte ist diese Woche leider noch im Urlaub, daher kann ich ihn leider nicht fragen
 
Zuletzt bearbeitet:
G

Gast2

Gast
Ich glaube nicht das es an den HTML Tags liegt - eher daran dass in diesem CSV mal die Zeilen mit einem zusätzlichen ';' abgeschlossen werden und mal nicht, z.B. PIM_PRODUCT_CODE_DESCRIPTION oder PAIA_FRONTEND_GENERAL_BRAND im Gegensatz zu PIM_PRICELIST und PRODUCT

Das ist eher ein Fehler in den Daten als ein Fehler im Task, aber ich kann da noch mal was drumrum bauen.
 

error404

Mitglied
Ich werde es erst einmal versuchen indem ich die ";" wegnehme.

Dann sehe ich ja ob es daran liegt


EDIT:
An den ';' scheint es nicht zu liegen. Ich habe gerade einfach mal zum Testen die Zeilen mit den HTML-Tags entfernt und dann funktionierte es

EDIT2:
Lag wohl doch an den ';' habe die CSV-Datei nochmal bearbeitet und es klappt.

Danke nochmals für deine Hilfe
 
Zuletzt bearbeitet:

error404

Mitglied
Sorry für den Doppelpost!

Jetzt taucht das nächste Problem auf.

Ich habe zum Testen immer nur Auszüge(50Zeilen) aus der CSV-Datei genommen. Wenn ich jetzt aber die ganze CSV-Datei(ca. 950 Zeilen) nehme, bekomme ich wieder einen Nullpointer.

Hier die exakte Meldung
CustomAntTask/build.xml:13: java.lang.NullPointerException

Kann es sein, dass Eclipse so eine Dateigröße nicht verwalten kann?
 
G

Gast2

Gast
Ich hab schon ein bisschen mit rumgespielt. Es sieht wirklich fast so aus als wenn da der Heapspace (auch wenn es merkwürdig ist das keine dementsprechende Exception fliegt) nicht mehr mitmacht. Ich versuche es grade ein bisschen zu debuggen und werd schreib dir nacher was du machen kannst.

An den HTML tags selber liegt es nicht. Wenn du ein paar tags in kürzere Zeilen schreibst ist es kein Problem. die 7000 Zeichen langen Zeilen machen Ärger. Ich denke das lässt sich aber mit ein paar options beherrschen.
 

error404

Mitglied
An den HTML tags selber liegt es nicht. Wenn du ein paar tags in kürzere Zeilen schreibst ist es kein Problem. die 7000 Zeichen langen Zeilen machen Ärger. Ich denke das lässt sich aber mit ein paar options beherrschen.

Bei mir funktioniert es auch mit den 7000 Zeichen langen Zeilen. Zumindest bei dem Auszug den ich zuletzt gepostet habe.
Nehme ich aber die ganze Datei mit 950Zeilen gibt es ärger

Die ganzen ';' am Ende der Zeilen habe ich auch entfernt und bin die Datei dann nochmal mehrfach durchgegangen bevor ich was übersehen konnte. Daran liegt es daher ganz sicher nicht
 
G

Gast2

Gast
Ich hab mal nur die drei in Frage kommenden Zeilen in der test.csv und er hängt sich daran auf. Ich werd mal schaun was ich rausbekomme
 
G

Gast2

Gast
Aha...

Code:
[columnFilter] Line 5 contains 12 columns
[columnFilter] Parsing line 6
[columnFilter] Line 6 contains 12 columns
[columnFilter] Parsing line 7
[columnFilter] Line 7 contains 12 columns
[columnFilter] Parsing line 8
[columnFilter] Line 8 contains 12 columns
[columnFilter] Parsing line 9
[columnFilter] Line 9 contains 12 columns
[columnFilter] Parsing line 10
[columnFilter] Line 10 contains 12 columns
[columnFilter] Parsing line 11
[columnFilter] Line 11 contains 12 columns
[columnFilter] Parsing line 12
[columnFilter] Line 12 contains 12 columns
[columnFilter] Parsing line 13
[columnFilter] Line 13 contains 12 columns
[columnFilter] Parsing line 14
[columnFilter] Line 14 contains 12 columns
[columnFilter] Parsing line 15
[columnFilter] Line 15 contains 12 columns
[columnFilter] Parsing line 16
[columnFilter] Line 16 contains 12 columns
[columnFilter] Parsing line 17
[columnFilter] Line 17 contains 12 columns
[columnFilter] Parsing line 18
[columnFilter] Line 18 contains 13 columns
[columnFilter] Error processing line 18
[columnFilter] PIM_PRODUCT_CODE_DESCRIPTION

Da stimmt wohl was nicht in der Zeile... Muss ich mal suchen
 
G

Gast2

Gast
Sodele...

Wenn du dir mal die Zeile PIM_PRODUCT_CODE_DESCRIPTION ansiehst und nach ';' suchst wirst du feststellen das in hu_HU ein ';' vorhanden ist. Das ist natürlich eher schlecht....

Code:
PIM_PRODUCT_CODE_DESCRIPTION;
"<b>GTIN</b> <b>ARTIKEL-CODE</b>, r GTIN gibt <u>Auskunft über den Hersteller und den Artikel</u>.che GTIN Codes. GTIN-Nummern haben 8,12,13 oder 14 Stellen, Varianten können länger und alphanumerisch sein.<br><br><b>Geben Sie alle Zeichen inklusive Sonderzeichen ein.</b><br>Beispiele: <br>""01234565"", „12345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";
"<b>GTIN</b> (=Global Trade Item Number, previously known as EAN) is the <b>ARTICLE CODE</b> most commonly used at retail check-out. <u>It defines the manufacturer as well as the SKU of the article</u>. That is why identical articles have identical GTIN codes. GTIN numbers have either 8,12,13 or 14 digits, but there exist variants with more digits and in alphanumerical format.<br><br><b>Enter all digits as imprinted with the GTIN code.</b> <br>Examples:<br>""01234565"", i2345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";
"<b>Le GTIN</b> (= Global  Item  Number,  précédemment EAN) est  le <b>CODE D'ARTICLE</b> que les consommateurs connaissent car on l’utilise au scanner des caisses dans le commerce. Le code-barre du GTIN <u>donne des renseignements sur le fabricant et l'article</u>. Les articles identiques ont des codes GTIN identiques. Les chiffres  GTIN comptent 8, 12, 13 ou 14 caractères, mais il existent des variantes plus longues et alphanumériques. <br><br><b>Entrez tous les caractères imprimés avec le code GTIN.</b> Exemples: <br>""01234565"", „12345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";
<b>GTIN</b> (=Globális Kereskedelmi Áruazonosító Szám, korábban EAN) a boltok pénztárainál leggyakrabban használt <b>CIKKSZÁM</b>mal kapcsolatban lehet ismerõs. <u>A kód mind a gyártót, mind magát a terméket azonosítja</u>;" ez az oka, hogy az azonos árucikkek GTIN-száma is azonos. A GTIN-számok 8, 12, 13 vagy 14 számjegybõl állhatnak, de ennél több számjegybõl álló, illetve betõket is tartalmazó változatok is léteznek.<br><br><b>Adja meg a nyomtatott GTIN-kód összes jegyét.</b> <br>Példák:<br>""""01234565"""", „12345678905"""", „(01)10384478861804"""", „(01)04012345678901(21)ABCDEFG123456789""";
<b>GTIN</b> (= Globalny Numer Jednostki Handlowej, wywodzący się z Europejskiego Kodu Towarowego EAN) jest najczęściej stosowanym <b>KODEM PRODUKTU</b> przy kasach w punktach sprzedaży detalicznej. <u>Określa on producenta oraz jednostkę magazynową SKU artykułu</u>. Z tego powodu niektóre artykuły mogą mieć identyczne kody GTIN. Numery GTIN mogą posiadać 8,12,13 lub 14 cyfr, jednak istnieją warianty mające większą liczbę cyfr oraz formaty alfanumeryczne.<br><br><b>Wprowadź wszystkie cyfry kodu GTIN.</b> <br>Przykłady:<br>„01234565”, „12345678905”, „(01)10384478861804”, „(01)04012345678901(21)ABCDEFG123456789”;
"<b>GTIN</b> (=Număr global de articol comercial, numit înainte EAN) este <b>CODUL DE ARTICOL</b> cel mai des folosit în momentul verificării de retail. <u>Defineşte producătorul, cât şi SKU-ul articolului (SKU =unitate de stoc)</u>. De aceea articole identice au coduri GTIN identice. Numerele GTIN au fie 8, 12, 13 sau 14 cifre, însă există variante cu mai multe cifre şi în format alfanumeric.<br><br><b>Introduceţi toate cifrele aşa cum sunt înscrise în codul GTIN.</b> <br>Exemple:<br>""""01234565"""", ä12345678905"""", """"(01)10384478861804"""", """"(01)04012345678901(21)ABCDEFG123456789""";
"<b>GTIN</b> (=Mã Số Mục Thương Mại Toàn Cầutrước kia được biết đến như là EAN) là <b>MÃ HÀNG</b> được dùng nhiều nhất ở quầy thu tiền bán lẻ. <u>Nó định nghĩa nhà sản xuất cũng đồng thời là SKU của món hàng</u>. Đó là lý do tại sao những món hàng giống hệt nhau có các mã GTIN giống nhau. Mã số GTIN có 8 12 13 hoặc 14 chữ số nhưng tồn tại các biến thể có nhiều chữ số hơn và ở định dạng chữ và số.<br><br><b>Nhập tất cả các chữ số như được in với mã GTIN.</b> <br>Ví dụ:<br>""""01234565"""" E2345678905"""" """"(01)10384478861804"""" """"(01)04012345678901(21)ABCDEFG123456789""";
"<b>GTIN</b> (=глобальный номер товарной позиции, ранее известный как EAN) это <b>КОД ТОВАРА</b>, наиболее часто используемый  в розничной торговле. <u>По нему можно определить производителя и артикул товара</u>. Поэтому идентичные товары имеют идентичный GTIN. Он состоит из 8,12,13 или 14 цифр, также бывают варианты с большим числом цифр и в буквенно-цифровом формате.<br><br><b>Введите все цифры, указанные в GTIN.</b> <br>Примеры:<br>""01234565"", ı2345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";
"<b>GTIN</b> (=Global Trade Item Number, Identificador Global de Item Comercial, anteriormente conhecido como EAN) é o <b>CÓDIGO DE ARTIGO</b> mais utilizado nos pontos de venda. <u>Identifica a empresa fabricante bem como o SKU (Unidade de Manutenção de Estoque) do produto</u>. Por isso, produtos idênticos têm códigos GTIN idênticos. Códigos GTIN têm 8,12,13 ou 14 dígitos, mas existem variantes com mais dígitos e em formato alfanumérico.<br><br><b>Introduza todos os dígitos presentes no código GTIN.</b> <br>Exemplos:<br>""01234565"", i2345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";
"<b>GTIN</b> (=Global Trade Item Number, Identificador Global de Item Comercial, anteriormente conhecido como EAN) é o <b>CÓDIGO DE ARTIGO</b> mais utilizado nos pontos de venda. <u>Identifica a empresa fabricante bem como o SKU (Unidade de Manutenção de Estoque) do produto</u>. Por isso, produtos idênticos têm códigos GTIN idênticos. Códigos GTIN têm 8,12,13 ou 14 dígitos, mas existem variantes com mais dígitos e em formato alfanumérico.<br><br><b>Introduza todos os dígitos presentes no código GTIN.</b> <br>Exemplos:<br>""01234565"", i2345678905"", ""(01)10384478861804"", ""(01)04012345678901(21)ABCDEFG123456789""";
"<b>GTIN</b> (=全球交易品号,以前称为 EAN) 是<b>货号</b>最常用于零售检查。 <u>GTIN 定义了制造商以及物品的 SKU</u>。因此相同物品具有相同的 GTIN 代码。 GTIN 号码具有 8、12、13 或 14 个数字,但是也有 GTIN 号码的数位更多以及采用字母格式。<br><br><b>输入 GTIN 代码打印的所有数字。</b> <br>实例:<br>""01234565""、""i2345678905""、""(01)10384478861804""、""(01)04012345678901(21)ABCDEFG123456789"""

[c]azonosítja</u>;" ez az oka,[/c] - entweder das muss im CSV berichtigt werden oder aber man muss mit maskierten Separator Charactern arbeiten.
 

error404

Mitglied
Ahja,

das ist wirklich schlecht.

Mich wundert es aber, dass es mit der test.csv die ich mir hier erstellt habe(mit exakt der selben Zeile) funktioniert und es erst abschmiert wenn ich die eigentliche Datei benutzen möchte(translations.csv)

Dort liegen ja auch die Zeilen drin die ich hier im Forum gepostet habe.
 
G

Gast2

Gast
Es funktioniert mit dem ersten Beispiel was du gepostet hattst, nicht mit dem zweiten. Das erste enthält ja auch kein Problem.

Ich hab mal den Code um ein paar Ausgaben erweitert und das Problem mit dem letzten ';' auch reingaubt. Das wird einfach gelöscht.

Java:
package org.antexample;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

public class ColumnFilter extends Task {

	String inputFile;
	String separator = ";";
	String outputFile;
	String locales;

	public void setInputFile(String inputFile) {
		this.inputFile = inputFile;
	}

	public void setSeparator(String separator) {
		this.separator = separator;
	}

	public void setOutputFile(String outputFile) {
		this.outputFile = outputFile;
	}

	public void setLocales(String locales) {
		this.locales = locales;
	}

	private Map<String, Column> columnsByName = new HashMap<String, Column>();
	private Map<Integer, Column> columnsByNumber = new HashMap<Integer, Column>();
	private Column labelColumn;
	private String[] localColumns;

	public static void main(String[] args) {
		ColumnFilter c = new ColumnFilter();
		c.execute();

	}

	@Override
	public void execute() throws BuildException {
		try {
			localColumns = locales.split(",");
			List<String> lines = readFile(new File(inputFile));
			List<String> preparedLines = prepareLines(lines);
			System.out.println("Parsing headerline");
			int columnCount = parseHeaderLine(lines);
			System.out.println("Processing lines");
			processLines(preparedLines, columnCount);
			writeFile(new File(outputFile));
		} catch (Exception e) {
			e.printStackTrace();
			throw new BuildException(
					"Executing task failed: " + e.getMessage(), e);
		}
	}

	private void processLines(final List<String> lines, int columnCount) {
		for (int i = 1; i < lines.size(); i++) {
			parseLine(lines.get(i), i, columnCount);
		}
	}

	private List<String> prepareLines(final List<String> lines) {
		List<String> preparedLines = new ArrayList<String>();
		for (String s : lines) {
			if (s.trim().endsWith(separator)) {
				String newLine = s.trim();
				newLine = newLine.substring(0, newLine.length() - 1);
				preparedLines.add(newLine);
			} else {
				preparedLines.add(s);
			}
		}
		return preparedLines;

	}

	private void parseLine(final String line, final int row,
			final int columnCount) throws BuildException {
		System.out.println("Parsing line " + row);
		String[] cols = line.split(separator);
		if (cols.length != columnCount) {
			throw new BuildException(
					"Row "
							+ row
							+ " does not have the correct amount of columns, expected were "
							+ columnCount + " columns, found " + cols.length
							+ " columns");
		}
		try {

			for (int i = 0; i < cols.length; i++) {
				Column c = columnsByNumber.get(i);
				c.add(cols[i]);
			}
		} catch (Exception e) {
			throw new BuildException("Error processing line " + row, e);
		}
	}

	private int parseHeaderLine(final List<String> lines) {
		String headerLine = lines.get(0);
		String[] cols = headerLine.split(separator);
		System.out.println("Header line contains " + cols.length + " columns: "
				+ Arrays.toString(cols));
		labelColumn = new Column(0, cols[0]);
		columnsByName.put(cols[0], labelColumn);
		columnsByNumber.put(0, labelColumn);
		for (int i = 1; i < cols.length; i++) {
			Column c = new Column(i, cols[i]);
			columnsByName.put(cols[i], c);
			columnsByNumber.put(i, c);
		}
		return cols.length;
	}

	private void writeFile(final File file) {
		System.out.println("Writing output to file " + file.getAbsolutePath());
		System.out.println("Output file will contain the columns "
				+ Arrays.toString(localColumns));
		try {
			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
					new FileOutputStream(file)));

			List<Column> columns = new ArrayList<Column>();
			columns.add(labelColumn);

			for (String locale : localColumns) {
				columns.add(columnsByName.get(locale));
			}

			int rows = 0;
			StringBuilder sb = new StringBuilder();
			for (Column c : columns) {
				sb.append(c.getLocale());
				sb.append(separator);
				if (rows < c.size()) {
					rows = c.size();
				}
			}
			String header = sb.toString();
			header = header.substring(0, header.length() - 1);

			out.write(header);
			out.newLine();

			for (int i = 1; i <= rows; i++) {
				sb = new StringBuilder();
				for (Column c : columns) {
					sb.append(c.get(i));
					sb.append(separator);
				}
				String line = sb.toString();
				line = line.substring(0, line.length() - 1);

				out.write(line);
				out.newLine();
			}

			out.close();
		} catch (Exception e) {
			throw new BuildException("Could not write to file "
					+ file.getAbsolutePath(), e);
		}
	}

	private List<String> readFile(final File file) throws BuildException {
		System.out.println("Reading input from file " + file.getAbsolutePath());
		List<String> lines = new ArrayList<String>();
		try {
			BufferedReader reader = new BufferedReader(new FileReader(file));
			String line = null;
			int i = 0;
			while ((line = reader.readLine()) != null) {
				if (line.length() > 0) {
					if (i > 0) {
						System.out.println("Reading line " + i + " with "
								+ line.length() + " characters");
					} else {
						System.out.println("Reading line 0, header line");
					}
					i++;
					// System.out.println(line);
					lines.add(line);
				}
			}
		} catch (Exception e) {
			throw new BuildException("Cannot read input file "
					+ file.getAbsolutePath(), e);
		}
		return lines;
	}
}

final class Column {
	final int number;
	final String locale;
	final Map<Integer, String> rows;

	public Column(int number, String locale) {
		this.number = number;
		this.locale = locale;
		rows = new HashMap<Integer, String>();
	}

	public void add(String rowContent) {
		add(rows.size() + 1, rowContent);
	}

	public void add(int rowNumber, String rowContent) {
		rows.put(rowNumber, rowContent);
	}

	public int size() {
		return rows.size();
	}

	public String get(int rowNumber) {
		return rows.get(rowNumber);
	}

	public int getNumber() {
		return number;
	}

	public String getLocale() {
		return locale;
	}

	public Map<Integer, String> getRows() {
		return rows;
	}

	public String toString() {
		StringBuilder sb = new StringBuilder(number + ": " + locale + "\n");
		for (int rowIdx : rows.keySet()) {
			sb.append(rows.get(rowIdx));
			sb.append("\n");
		}
		return sb.toString();

	}

}


Versuch es mal mit der Version die ich jetzt angehängt habe. Das sollte dir ziemlich genau sagen warum eine Zeile nicht zu verarbeiten ist.


Wenn man das zusätzliche ';' löscht funktioniert bei mir das zweite von dir gepostete Beispiel ohne Probleme.

Code:
Buildfile: C:\Users\fassy\workspace\AntTaskTest\build.xml

main:
[columnFilter] Reading input from file C:\Users\fassy\workspace\AntTaskTest\test.csv
[columnFilter] Reading line 0, header line
[columnFilter] Reading line 1 with 163 characters
[columnFilter] Reading line 2 with 222 characters
[columnFilter] Reading line 3 with 111 characters
[columnFilter] Reading line 4 with 296 characters
[columnFilter] Reading line 5 with 528 characters
[columnFilter] Reading line 6 with 703 characters
[columnFilter] Reading line 7 with 242 characters
[columnFilter] Reading line 8 with 252 characters
[columnFilter] Reading line 9 with 262 characters
[columnFilter] Reading line 10 with 164 characters
[columnFilter] Reading line 11 with 124 characters
[columnFilter] Reading line 12 with 231 characters
[columnFilter] Reading line 13 with 626 characters
[columnFilter] Reading line 14 with 675 characters
[columnFilter] Reading line 15 with 248 characters
[columnFilter] Reading line 16 with 370 characters
[columnFilter] Reading line 17 with 129 characters
[columnFilter] Reading line 18 with 6874 characters
[columnFilter] Reading line 19 with 3084 characters
[columnFilter] Reading line 20 with 3056 characters
[columnFilter] Parsing headerline
[columnFilter] Header line contains 12 columns: [´╗┐labelKey, de_DE, en_GB, fr_FR, hu_HU, pl_PL, ro_RO, vn_VN, ru_RU, pt_PT, pt_BR
, zh_CN]
[columnFilter] Processing lines
[columnFilter] Parsing line 1
[columnFilter] Parsing line 2
[columnFilter] Parsing line 3
[columnFilter] Parsing line 4
[columnFilter] Parsing line 5
[columnFilter] Parsing line 6
[columnFilter] Parsing line 7
[columnFilter] Parsing line 8
[columnFilter] Parsing line 9
[columnFilter] Parsing line 10
[columnFilter] Parsing line 11
[columnFilter] Parsing line 12
[columnFilter] Parsing line 13
[columnFilter] Parsing line 14
[columnFilter] Parsing line 15
[columnFilter] Parsing line 16
[columnFilter] Parsing line 17
[columnFilter] Parsing line 18
[columnFilter] Parsing line 19
[columnFilter] Parsing line 20
[columnFilter] Writing output to file C:\Users\fassy\workspace\AntTaskTest\out.csv
[columnFilter] Output file will contain the columns [de_DE, fr_FR, ro_RO]

BUILD SUCCESSFUL
Total time: 0 seconds
 

Anhänge

  • AntTaskTest.zip
    23,1 KB · Aufrufe: 1
  • AntColumnFilter.jar
    5,3 KB · Aufrufe: 3
Zuletzt bearbeitet von einem Moderator:

error404

Mitglied
Bei mir funktioniert es auch mit dem zweiten Beispiel. Nur dass ich bei diesem bereits die ';' am Ende der Zeilen entfernt habe

Noch eine andere Frage. Brauche ich eigentlich dein ganzen Projekt oder reicht es wenn ich die JAR in mein eigenes kopiere?
 
G

Gast2

Gast
Es reicht wenn du nur die lib hast. Und evtl halt die ant.jar falls du sie nicht eh schon eingebunden hast.

Hab dir nur das ganze Project mitgegeben wenn du es erweitern willst. Wie gesagt ist kein Hexenwerk. Wenn du in dem Praktikum noch ein bisschen mehr lernen willst versuch zu verstehen was ich da gemacht habe.

Als Einstiegspunkt: ANT ruft quasi die execute Methode der Klasse auf nachdem sie instanziert wurde.
 

error404

Mitglied
Ich werde mir dein Projekt mal mit nach Hause nehmen und dort in ruhe ansehen.

Danke nochmal für deine Hilfe

Bis ich die translations.csv korrigiert und dann getestet habe lasse ich das Thema hier auf. Wenn dann alles funktioniert setze ich es auf gelöst.

EDIT:
Funktioniert jetzt alles wunderbar.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Fehler beim Imgui mit Maven Tools - Maven, Gradle, Ant & mehr 7
T Maven: Probleme beim Einbinden der Dependencies Tools - Maven, Gradle, Ant & mehr 9
M github + maven Fehler beim repository erstellen Tools - Maven, Gradle, Ant & mehr 1
H Problem beim Verschieben der main-class -> A jni error has occured, please check... Tools - Maven, Gradle, Ant & mehr 9
pkm Beim Deployen wird ein Package nicht gefunden, obwohl aus Buildpath. Tools - Maven, Gradle, Ant & mehr 0
X Maven Dependencies beim install mit in die Jar einbinden Tools - Maven, Gradle, Ant & mehr 6
E Maven Probleme beim Arquillian Deployen Tools - Maven, Gradle, Ant & mehr 0
B Webstart Java Webstart hängt sich beim Laden auf! Tools - Maven, Gradle, Ant & mehr 8
P Classpath beim Ausführen eines SQL-Scripts per ANT angeben Tools - Maven, Gradle, Ant & mehr 2
K Applet Fehler beim Starten Tools - Maven, Gradle, Ant & mehr 12
F Problem beim Kompilieren ohne IDE Tools - Maven, Gradle, Ant & mehr 5
P Maven Download-Probleme beim Build Tools - Maven, Gradle, Ant & mehr 5
J Fehler beim Parsen von web.xml mit web-app 2.5 Tools - Maven, Gradle, Ant & mehr 2
S Webstart Problem beim Start von Webstart Tools - Maven, Gradle, Ant & mehr 4
H Java Applet Problem beim einbinden in HTML Tools - Maven, Gradle, Ant & mehr 3
newcron Applet Keine warnung beim starten von Applets, die auf die HD zugreifen? Tools - Maven, Gradle, Ant & mehr 2
G Java-Applet Probleme beim Browser Tools - Maven, Gradle, Ant & mehr 14
reibi Maven : Resourcen NICHT mit einbinden beim Builden Tools - Maven, Gradle, Ant & mehr 10
E Verzögerung beim Refresh (F5) mit einem Applet verursachen Tools - Maven, Gradle, Ant & mehr 16
T beim Kompilieren änderungen vornehmen Tools - Maven, Gradle, Ant & mehr 5
G Frage zur JARs beim deployen Tools - Maven, Gradle, Ant & mehr 5
S Ladebalken beim laden des Applets Tools - Maven, Gradle, Ant & mehr 9
G Problem beim deployen eines Applets Tools - Maven, Gradle, Ant & mehr 8
C JApplet soll beim Aufruf nicht neustarten Tools - Maven, Gradle, Ant & mehr 3
M Code ausführen beim Browser schließen / Alternative zu stop? Tools - Maven, Gradle, Ant & mehr 5
J Problem beim schreibenden Dateizugriff Tools - Maven, Gradle, Ant & mehr 7
D Fehler beim Applet laden! Tools - Maven, Gradle, Ant & mehr 9
H Applet Access Denied - Beim zugriff auf eine .txt Datei Tools - Maven, Gradle, Ant & mehr 8
G Browser stürtzt beim Appletaufruf ab Tools - Maven, Gradle, Ant & mehr 2
I Fehler beim Signieren der JAR Dateien für Webstart Tools - Maven, Gradle, Ant & mehr 1
U Probleme beim Reloaden des Applets im Browser Tools - Maven, Gradle, Ant & mehr 9
D E/A-Ausnahme beim lesen (Applet will nicht starten) Tools - Maven, Gradle, Ant & mehr 3
P Problem beim Senden einer Datei Tools - Maven, Gradle, Ant & mehr 5
M Applet startet beim zweiten Aufruf nicht mehr? Tools - Maven, Gradle, Ant & mehr 4
A Probleme beim Anzeigen des Applets Tools - Maven, Gradle, Ant & mehr 5
saxos1983 Fehlerüberprüfung beim Laden von Bilder Tools - Maven, Gradle, Ant & mehr 3
Y falsches password beim signieren von applet Tools - Maven, Gradle, Ant & mehr 4
G Fehler beim Laden des Applets Tools - Maven, Gradle, Ant & mehr 7
H Probleme beim Applet signieren Tools - Maven, Gradle, Ant & mehr 10
S Access Denied beim Bild laden Tools - Maven, Gradle, Ant & mehr 7
R access denied beim Java Applet Tools - Maven, Gradle, Ant & mehr 5
D Problem beim einbinden von jar und class datei Tools - Maven, Gradle, Ant & mehr 8
S Informationen beim Benutzer ablegen Tools - Maven, Gradle, Ant & mehr 4
P Eclipse Problem beim JAR-erstellen Tools - Maven, Gradle, Ant & mehr 5
A access denied beim anzeigen von Bildern Tools - Maven, Gradle, Ant & mehr 2
R fehler beim übernehmen von applets Tools - Maven, Gradle, Ant & mehr 3
G Wie überprüft man beim Image ob es geklickt wurde? Tools - Maven, Gradle, Ant & mehr 9
D problem beim auslesen von text aus einem textfeld... Tools - Maven, Gradle, Ant & mehr 15
E Card beim CardLayoutManager mit paint() bemalen??? Tools - Maven, Gradle, Ant & mehr 4
R Code beim Beenden eines Applets ausführen? Tools - Maven, Gradle, Ant & mehr 1
M Maven (Java EE, WAR) Eigener Buildschritt - Manipulation von Dateien Tools - Maven, Gradle, Ant & mehr 4
J Wie Jar-Dateien in NetBeans erstellen? Tools - Maven, Gradle, Ant & mehr 4
B Subversion Eclipse Dateien mit Fragezeichen Tools - Maven, Gradle, Ant & mehr 2
B Ant Schleifen mit Dateien als Parameter Tools - Maven, Gradle, Ant & mehr 2
F Ant ANT javac class-Dateien von entfernten JAVA-Klassen löschen Tools - Maven, Gradle, Ant & mehr 11
N Ausführbare Dateien aus jar-Dateien verwenden Tools - Maven, Gradle, Ant & mehr 2
P Maven2 - wie mache ich externe Jar Dateien zu Artifacts? Tools - Maven, Gradle, Ant & mehr 15
B Maven: file.separator und properties-Dateien Tools - Maven, Gradle, Ant & mehr 8
F Kleines Java-Programm geschrieben, 30 Dateien? Tools - Maven, Gradle, Ant & mehr 16
D Ant: unzip; alle Dateien mit *.zip im Verzeichnis entpacken Tools - Maven, Gradle, Ant & mehr 1
D WebStart Caching kleinere Dateien aufm Client ? Tools - Maven, Gradle, Ant & mehr 7
S Sonderzeichen in class dateien? Tools - Maven, Gradle, Ant & mehr 4
J Externe Dateien im jar File Tools - Maven, Gradle, Ant & mehr 4
G Mehrer Dateien auswählen mit JFileChooser Tools - Maven, Gradle, Ant & mehr 6
P Applet - WAV-Dateien werden nicht abgespielt Tools - Maven, Gradle, Ant & mehr 6
V Ogg Sound dateien mit Java abspielen? Tools - Maven, Gradle, Ant & mehr 8
A mehrere class.dateien Tools - Maven, Gradle, Ant & mehr 10
B Dateien per POST Request an PHP Script senden Tools - Maven, Gradle, Ant & mehr 2
L URL Dateien lesen Tools - Maven, Gradle, Ant & mehr 4
S Dateien laden ? Tools - Maven, Gradle, Ant & mehr 2
J Dateien auf einen anderen Rechner bekommen Tools - Maven, Gradle, Ant & mehr 8
K Sehr kleine wav Dateien, bis zu 20KB,werden nicht abgespielt Tools - Maven, Gradle, Ant & mehr 3
J Editor für ".class"-Dateien? Tools - Maven, Gradle, Ant & mehr 3
8 Applet -> PHP = Dateien schreiben Tools - Maven, Gradle, Ant & mehr 17
Z Mit JFileChooser per Applet Dateien auf dem Server auswählen Tools - Maven, Gradle, Ant & mehr 4
K TXT Dateien vom Server/Host lesen und schreiben.WIE? Tools - Maven, Gradle, Ant & mehr 6
M Dateien mit Applet schreiben/lesen (lokal) Tools - Maven, Gradle, Ant & mehr 3
S Sound/Midi Dateien erst komplett laden Tools - Maven, Gradle, Ant & mehr 12

Ähnliche Java Themen

Neue Themen


Oben