Datei zeilenweise lesen

guguli

Bekanntes Mitglied
Halo zusammen,

ich möchte gerne eine txt datei zeilenweise einlsen was eigentlich kein problem ist. jedoch würde ich gerne wissen wie ich die Zeilen zwischen zwei andere zeilen einlesen kann.

also sobald "xSpace" in einer zeile auftaucht dann würde ich gerne die zeilen einlesen bis "ySpace" in einer zeile auftaucht dann würde ich gern stoppen.

Es ist zu beachten dass die dazwischen liegenden zeilen beinhalten keine xSpace, also mit zeile.contains("xSpace") funktioniert nicht.

Vielen dank
 
Zeig mal deinen Code her. Also meine Lösung ist in 1 min programmiert worden und funktioniert tadellos.
 
Weißt du, wie lang jede Zeile ist?

Wenn nicht, dann iterierst du mit einer Schleife über die Datei und ließt immer eine Zeile ein. Dann guckst du bei jeder Zeile mit .startsWith() nach, ob dein String vorhanden ist. Wenn ja, läuft die Schleife aus und eine Neue startet, welche nachprüft, ob did Zeile mit dem anderen String beginnt und sämtliche Zeilen, bei denen das nicht der Fall ist mit .append() zu einem StringBuilder/StringBuffer hinzufügt.
 
eine andere Frage:

ich lese die txt datei zeilen weise als String nun sind die werte die ich speichern möchte float.
ich hab diese werte als float gespeichert und möchte die nun durch 1000 dividieren.
So dass ich z.B. für -0.1 diesen wert bekomme -0.000100,
Ich bekomme aber so einen wert raus :-1.00000005E-4

si sieht mein code aus:
Java:
static ArrayList<Float> YSpaceValues = new ArrayList<Float>();

float yValue = Float.parseFloat(zeile);
						yValue = (yValue/1000);
						YSpaceValues.add(yValue);

woran kann das denn liegen ????


THX
 
Zuletzt bearbeitet:
das liegt an der natur von float/double - double würde es maßgeblich verringern, aber nicht so, wie du es möchtest.

das ist der selbe grund warum du nicht 1/7 als komma-zahl aufschreiben kannst

lg alexander riebler
 
Java:
public class Foo{

	public static void main(String[] args){
		
		System.out.printf("%.1f", 00000.2f);
	}
}
Weil z.B solch ein Konstrukt zu folgender (formatierten) Ausgabe führt :

Code:
0,2
 
Zuletzt bearbeitet:
Ok ich verstehe, aber mit printf wird das ja in Konsole angezetgt, wie kann ich denn diesen wert denn speichern. So wie in meinem Code will ihn dann in yValue speichern.

THX
 
Den Wert zu runden ist kein Problem. Warte kurz. Ich hab da irgendwo was rumliegen.

EDIT: Hier ist es:
Java:
double runde(double paramDouble, int stellen){
 if (paramDouble > Integer.MAX_VALUE|| paramDouble < Integer.MIN_VALUE) throw new IllegalArgumentException("Zahl außerhalb des Bereichs");
 paramDouble*= (stellen * 10)

 return ((double)((int)((paramDouble < 0 ? paramDouble - .5 : paramDouble + .5)))) / (stellen * 10);
}

Das ist zwar eigentlich C++ und ungetestet umgebaut aber eigentlich müsste es funktionieren.


paramDouble wird zuerst mit den Stellen multipliziert. Dadurch wird das Runden mittels Casten auf int ermöglicht. Ist paramDouble negativ, so werden 0,5 abgezogen, das Ganze zu int gecastet, wieder zu double gecastet und wieder auf die ursprüngliche Größenordnung gebracht. Ist paramDouble positiv, so werden 0,5 hinzuaddiert und der Rest bleibt gleich.
 
Zuletzt bearbeitet:
Hi,
danke erstmal,
aber das funktioniert nicht so ganz.
Also ich bekomme die werte in mm und würde die dann in Meter umrechnen. so will ich für 0.1 mm dann 0.0001 m bekomme. mit deiner Methode bekomme ich diesen wert nicht.

In deine methode ist dann 0.1 paramDouble und stelle ist dann 1000 oder???


so mach ich das:
Java:
	static ArrayList<Float> YSpaceValues = new ArrayList<Float>();

float yValue = Float.parseFloat(zeile);;
yValue *= (1000 *10);
Float yValue2= ((float)((int)((yValue < 0 ? yValue - .5 : yValue + .5)))) / (1000 *10 );
YSpaceValues.add(yValue2);
 
Zuletzt bearbeitet:
Wenn ich diese zeile benutze :

System.out.printf("%.5f%n",yValue/1000);

dann sind die werte genau so wie ich die haben will aber ich weiss nicht wie ich diese in YSpaceValues speichern kann.
kann da mir einer weiter helfen??

THX
 
Wenn ich diese zeile benutze :

System.out.printf("%.5f%n",yValue/1000);

dann sind die werte genau so wie ich die haben will aber ich weiss nicht wie ich diese in YSpaceValues speichern kann.
kann da mir einer weiter helfen??

THX

Speichern im Sinne von ? Persistent ? Lokal ?

Du erzeugst halt zzt. immer nur eine Formatierte Ausgabe in Form einer Zeichenkette, ebenso wie es DecimalFormat machen würde.

Was genau ist denn dein Wunsch ? willst du den wert in dieser Form speichern ?

Code:
0.00458
 
Stellen ist das, als was du es definierst. Wenn du 4 eingibst, müsste auf 4 Nachkommastellen gerundet werden.

Was bekommst du denn stattdessen?
 
Also ich lese zeileweise eine txt datei ein. diese beinhaltet werte wie -0.1, -0.2,...
ich wandle die erstmal vom string zu float
Java:
double yValue = Float.parseFloat(zeile);

diese werte sind ja in milimeter und ich möchte gerne die in meter umrechnen und das ergebnis in einem ArrayList Speichern.
so bekomme ich in meinem array werte wie [0.0001,0.0002,...]
aber wenn ich das so mache wie oben bekomme ich:
[-1.0E-4, -2.0E-4,...]
 
Zuletzt bearbeitet:
Dann musst du runden Mit Math.round(float f); ?!

Wenn du es so machst wie oben bekommst du eine TEXTUELLE FORMATIERTE Darstellung deines Wertes,
ansonsten verstehe ich jetzt das Konkrete problem nicht so ganz ^^
 
Zuletzt bearbeitet:
Vermutlich bekommt er irgendwelche seltsamen Zahlen als Ergebnis, wie 0,0010000374649389 und will diese aber auf 3 Nachkommastellen gerundet haben. Also 0,001.
Eigentlich müsste meine Methode diese Aufgabe erfüllen. Funktionieren würde aber auch:

Java:
public double runde(double paramDouble, int stellen){
 double paramDoubleGroß = paramDouble * (stellen * 10);
 double paramDoubleGroßGerundet = Math.round(paramDoubleGroß);
 double paramDoubleGerundet = paramDoubleGroßGerundet / (stellen * 10);
 return paramDoubleGerundet;
}

Der Code ist jetzt sehr auf Lesbarkeit geschrieben. Da lässt sich noch was optimieren.
 

Neue Themen


Zurück
Oben