Wie vergleiche ich die beiden Int? Konvertieren in String und dann mit equals vergleichen schlug fehl...
Code:
import java.io.*;
public class Main
{
/** Creates a new instance of Main */
public Main()
{
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
//datei einlesen und zeilen in einzelne strings zerlegen
//dann .dat für ps schreiben und eintrag in katalog.txt
try
{
String zeile="";
String id="";
int i=0;
int status=0;
int z=0;
String tmp="";
File f = new File("E:\\privat\\daten\\hyg1_1.csv");
File o = new File("E:\\privat\\daten\\hip.txt");
BufferedReader b = new BufferedReader(new FileReader(f));
BufferedWriter w = new BufferedWriter(new FileWriter(o));
while ((zeile=b.readLine()) != null)
{
while ((i=zeile.indexOf(",")) != -1)
{
id=zeile.substring(0, i);
if (z == 1)
{
w.write(id);
w.newLine();
}
zeile=zeile.substring(i+1, zeile.length());
z++;
System.out.println(Integer.toString(z));
}
id=zeile;
status++;
z=0;
System.out.println("Fortschritt: " + Integer.toString(status) + " von 87475 (" + Integer.toString((status*100)/87475) + " %)");
}
b.close();
w.close();
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
}
Das geht... Nur wie mein Vorredner schon erwähnt hat, ist z wohl nur dann 1, wenn Du mehr als 2 Werte in einer Zeile hast. Denn bei 2 Werten gibt es nur ein Komma, daher wird die Schleife nur einmal durchlaufen.
Hmm... die Abfrage z==1 bewirkt ja, dass von der Zeile die zweite Spalte in die Datei geschreiben wird (an der Stelle läuft z ja nicht von 1 bis (Anzahl Spalten), sondern von 0 bis (Anzahl Spalten-1); das z++ kommt ja erst später).
Bei mir funktioniert das auch: eine Datei mit einer Zeile "a,b,c" führt zu einer Ausgangsdatei mit einer Zeile "b"
Hat jmd. ne Idee wieso bei der Datei nix ausgegeben wird, obwohl z =1 wird?
Und wenn ich die erste nehmen (.csv.zip) werden mir Zeilen ausgegeben, die teilweise gar nicht enthalten sind.
Wenn ich eine csv-Datei selber erstelle und da a,b,c reinschmeiße gehts...
Ist etwas mühsam, die ganze Datei zu vergleichen; auf den ersten Blick sieht es aber gut aus: die Ausgabedatei enthält die "Hip"-Spalte der Eingangsdatei.
ich habe hier deine code vereinfacht und suche von Fehlerhaften zeilen ermöglicht
kommentare anschauen!
Code:
import java.io.*;
public class Main
{
/** Creates a new instance of Main */
public Main()
{
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
//datei einlesen und zeilen in einzelne strings zerlegen
//dann .dat für ps schreiben und eintrag in katalog.txt
try
{
String[] sarr;//von Slava
String zeile="";
String id="";
int i=0;
int status=0;
int z=0;
String tmp="";
File f = new File("E:\\privat\\daten\\hyg1_1.csv");
File o = new File("E:\\privat\\daten\\hip.txt");
BufferedReader b = new BufferedReader(new FileReader(f));
PrintWriter w = new PrintWriter(new BufferedWriter(new FileWriter(o)));
while ((zeile=b.readLine()) != null)
{
sarr=zeile.split(",");//ganze zeile in arrayholen
if(sarr.length!=12){
System.out.println("anomali in der zeile "+status);//es stimt vas mit anzahl der Komas nicht
System.out.println(zeile);//um die Defecte Zeile ansehen;
continue;//dies mal schreiben wir nicht
}
w.println(sarr[1]);//zweite spalte schreiben
status++;
System.out.println("Fortschritt: " + Integer.toString(status) + " von 87475 (" + Integer.toString((status*100)/87475) + " %)");
}
b.close();
w.close();
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
}
Nein. Da aber in der Ausgabedatei keine einzige Zeile steht muss er ja schon bei der ersten Zeile stocken. Komischerweise wenn ich die zeilen rauskopiere und eine neue CSV-Datei anlege geht es.
Erkennt er den Zeilenumbruch nicht oder ist die CSV-Datei beschädigt?
Denn die letzte auf der Webseite kann ich nicht entpacken, da mein gz-entpacker meint die ist kaput.
Wenn ich die aber einfach in .csv umbenenne bekomm ich die normal auf. Was ist da los?