# Komprimieren/ Dekomprimieren



## Wichtige Frage (24. Mai 2011)

Hallo liebe leute,
ich brauch wieder eure Hilfe!
Und zwar geht es diesesmal um folgendes Problem: Im Kurs haben wird mit dem Lehrer ein Programm gemacht mit dem man Datei'en komprimieren kann, Beispiel: man steht eine textdatei 'unkomprimiert.txt' ausserhalb von den Folders bin, src, usw. In dieser textdatei steht zB fffpppss dann soll das folgende programm eine neue textdatei erstellen die die erste textdatei 'unkomprimiert.txt' komprimiert hat, dh die neue textdatei enthällt dann folgendes: f3p3s2, wir haben als drei f's, drei p's und zwei s in der unkomprimierten textdatei.
das programm sieht so aus:


```
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;


public class komprimiertSchreiben {
	public static void main(String[]args)
	{
	String dateiNameIn = "unkomprimiert.txt";
	String dateiNameOut = "komprimiert.txt";
	File meineDateiIn = new File(dateiNameIn);
	File meineDateiOut = new File(dateiNameOut);
	FileInputStream fis = null;
	FileOutputStream fos = null;
	try{
	fis = new FileInputStream(meineDateiIn);
	fos = new FileOutputStream(meineDateiOut);
	int fr=0;
	int act=fis.read();
	while(fr!=-1) //-1 = Dateiende
	{int zaehler =1; //Anzahl Wiederholungen
	while (act==(fr=fis.read())){zaehler++;}//bis verschieden	
	System.out.print((char)act);
	System.out.print(zaehler+" ");
	fos.write(act);
	fos.write(zaehler);
	act=fr;}
	} catch(Exception e){}
	try{fos.close();} catch (Exception e){}
	}}
```


Und meine Aufgabe ist es nun das umgekehrte zu machen: Eine komprimierte Datei umwandeln in eine dekomprimierte. Dh wir gehen nun eine Textdatei einlesen zB f3z2 dann soll das neue Programm eine neue textdatei erstellen die fffzz enthält! wie geht das? ich weiss überhaupt nicht wo anfangen!

Bin für jede Antwort dankbar! Muss die Aufgabe Freitag abgeben...


----------



## Marcinek (24. Mai 2011)

Hallo 

du liest die Datei ein und gehst sie zeichen für zeichen durch.

Wenn du eine Zahl findest, dann fügst du das zeichen davor 3 mal ein.

Schreibst das in eine neue Datei.

Gruß,

Martin


----------



## Wichtige Frage (24. Mai 2011)

ja diese idee hatte ich auch, aber ich weiss nicht wie ich sie umsetzen soll da meine java erfahrung quasi gleich null ist...es hört sich relativ einfach und kurz an, könntest du es kurz schreiben?


----------



## XHelp (25. Mai 2011)

Vllt findest du http://www.java-forum.org/java-basics-anfaenger-themen/118167-dekomprimieren-datei-txt.html hier was.
Es schein das selbe Problem zu sein mit dem selben Algo.


----------



## Noctarius (25. Mai 2011)

Sieht wie ein simpler RLE aus


----------



## Wichtige Frage (25. Mai 2011)

XHelp hat gesagt.:


> Vllt findest du http://www.java-forum.org/java-basics-anfaenger-themen/118167-dekomprimieren-datei-txt.html hier was.
> Es schein das selbe Problem zu sein mit dem selben Algo.



Habe nachgeschaut, sieht so aus aber da steht keine lösung...


----------



## Marcinek (25. Mai 2011)

Hallo,

melde dich im Forum an und schreibe mir eine PM.

Gegen eine kleine Spende schreibe ich alles 


Gruß,

Martin


----------



## Wichtige Frage (25. Mai 2011)

was verstehst du unter einer kleinen Spende?


----------



## Roberto007 (25. Mai 2011)

Ich bins, der "Wichtige Frage". Nunja brauch noch immer jemand der so nett ist und mir die Aufgabe macht evtl erklärt...


----------



## XHelp (25. Mai 2011)

Wenn du jemanden willst, der es für dich macht, dann mach ein Thread in der Jobbörse auf und schreibt, was du dafür zahlst


----------



## Roberto007 (25. Mai 2011)

-_- muss man echt für 5 Zeilen zahlen? Es wird doch jemand hier sein der nur 10 Minuten seiner Freizeit opfern kann und es machen kann...


----------



## ARadauer (25. Mai 2011)

Wir machen eigentlich keine Hausaufgaben. Wir helfen gerne bei konkreten Fragestellungen.
Aber für eine fertige Lösung wirst du etwas bezahlen müssen...


----------



## ARadauer (25. Mai 2011)

Roberto007 hat gesagt.:


> -_- muss man echt für 5 Zeilen zahlen? Es wird doch jemand hier sein der nur 10 Minuten seiner Freizeit opfern kann und es machen kann...



Viele Leute opfern gerne 10 Minuten ihrer Freizeit um jemanden bei konkreten Fragen zu helfen.
Aber einfach plump die fertige Lösung zu liefern, damit jemand seine Hausübung nicht machen muss, dafür sind wir nicht da...


----------



## Roberto007 (25. Mai 2011)

Ich habe aber echt keine Ahnung wie ich dieses Programm schreiben soll? Der Sinn und Zweck von meiner Frage besteht darin dass ihr mir erklärt was ich in mein Programm schreiben muss und dass ich das Programm dann aber auch selber geschrieben habe. Euch das komplette Programm zu fragen war dumm von mir aber helft mir wenigstens wo ich anfangen soll und was ich schreiben soll...


----------



## XHelp (25. Mai 2011)

In dem anderen Thread habe ich doch schon mögliche Lösungsansätze geschrieben: z.B. RegEx. Also wäre es angebracht dir anzuschauen wie du mit regulären Ausdrücken mit Java umgehst. Es gibt ja schon den einen oder anderen Beispiel im Internet.


----------



## ARadauer (25. Mai 2011)

Roberto007 hat gesagt.:


> Der Sinn und Zweck von meiner Frage besteht darin dass ihr mir erklärt was ich in mein Programm schreiben muss und dass ich das Programm dann aber auch selber geschrieben habe.


Nein. Marcinek hat dir bereits gesagt was du machen musst, darauf du


> es hört sich relativ einfach und kurz an, könntest du es kurz schreiben?



Du willst einfach die Lösung, die wirst du aber nicht bekommen.

1. Also versuch mal die Datei zeichneweise einzulesen.
2. Dann versuch zu erkennen ob das zeichen eine zahl war oder nicht
3. Merk dir immer auch das letzte zeichen
4. mach dir eine methode die ein zeichen x mal ausgiebt
5. wenn das zeichen eine zahl war rufst du diese methode mit dem letzen zeichen und der zahl auf

fertig.. versuch diese schritte mal, wenn du irgendwo ein problem hast, zb wie erkenne ich ob ein zeichen eine zahl ist, such in google, wenn du keine lösung findest, kannst du gerne fragen

aber: uhuu das ist schwer, ich kann das nicht, bitte die lösung blablabla das hören wir täglich und iteresiert uns nicht, das ganze ist eigentlich ganz einfach, mann muss es sich nur mal 10 minuten anschaun...


----------



## Roberto007 (25. Mai 2011)

Sitze nun schon ne halbe Stunde dabei herauszufinden wie man die Datei zeichenweise einlesen kann, ohne erfolg, kannst du mir jetzt bitte helfen und sagen welchen Befehl man da benutzen muss?
Ich hab praktisch NULL Ahnung von Java.


----------



## XHelp (25. Mai 2011)

Roberto007 hat gesagt.:


> Sitze nun schon ne halbe Stunde dabei herauszufinden wie man die Datei zeichenweise einlesen kann, ohne erfolg



Eine halbe Stunde? Let me google that for you der erste Treffer hat einen Code :bahnhof:


----------



## Roberto007 (25. Mai 2011)

google ist nicht so mein freund, danke aber


----------



## Roberto007 (25. Mai 2011)

Man findet nur 'Zeilenweise einlesen' sonst nix, und jetzt?


----------



## ARadauer (25. Mai 2011)

```
try {
			FileReader f = new FileReader(new File("d:/test.txt"));			
			int c;
			while ((c = f.read()) != -1){
				char zeichen = (char)c;
				System.out.println(zeichen);
			}
			f.close();
		} catch (IOException e) {
			System.out.println("Die Datei konnte nicht eingelesen werden.");
		}
```



> Man findet nur 'Zeilenweise einlesen' sonst nix, und jetzt?


man könnte es auch zeilenweise einlesen und aus dem strings mit toCharArray() ein char array machen...


----------



## XHelp (25. Mai 2011)

Roberto007 hat gesagt.:


> Man findet nur 'Zeilenweise einlesen' sonst nix, und jetzt?



Ich habe sogar schon extra gesagt das im *1.* Link ein brauchbarer Code ist, und jetzt? Es ist schon ok, wenn du die ganze Aufgabestellung nicht selber bewältigen kannst, aber man wird doch wohl erwarten können, dass du eine einzige Seite mal selber durchließt, oder? :bahnhof:


----------



## Roberto007 (25. Mai 2011)

ARadauer hat gesagt.:


> ```
> try {
> FileReader f = new FileReader(new File("d:/test.txt"));
> int c;
> ...



Wüsste ich nur wie man einen array erstellt...


----------



## Roberto007 (25. Mai 2011)

XHelp hat gesagt.:


> Ich habe sogar schon extra gesagt das im *1.* Link ein brauchbarer Code ist, und jetzt? Es ist schon ok, wenn du die ganze Aufgabestellung nicht selber bewältigen kannst, aber man wird doch wohl erwarten können, dass du eine einzige Seite mal selber durchließt, oder? :bahnhof:



Ich habe diesen GANZEN Thread durchgelesen und das mit dem Array gefunden, aber das hilft mir auch nicht weiter wenn ich nicht weiss wie man ein Array erstellt und wie man damit arbeiten kann?


----------



## ARadauer (25. Mai 2011)

Roberto007 hat gesagt.:


> Wüsste ich nur wie man einen array erstellt...
> ...
> aber das hilft mir auch nicht weiter wenn ich nicht weiss wie man ein Array erstellt und wie man damit arbeiten kann?



Ja sorry, aber was sollen wir dageben machen? Dir erklären was ein array ist? Nein, dazu braucht man kein Forum... "java insel" da findest du genug infos....

Dir die Hausübung schreiben.. nein machen wir nicht...


Sorry wenn du Hilfe zum Trainieren für einen Marathon in einem Lauf Forum suchst, werden die dir nicht erklären wie man sich die Schuhe zu bindet...


----------



## Roberto007 (25. Mai 2011)

anstatt mir Vorwürfe zu machen könntest du auch so nett sein und mit sagen was ich schreiben muss um so ein CharArray zu erstellen.


----------



## Marcinek (25. Mai 2011)

Roberto007 hat gesagt.:


> anstatt mir Vorwürfe zu machen könntest du auch so nett sein und mit sagen was ich schreiben muss um so ein CharArray zu erstellen.




```
char[] meinarray;
```

Ich denke du musst vorher ein wenig die Insel lesen.

 Sonst haben wir hier einen 100 Seiten Thread und deine Frustration wird neue Grenzen erreichen.

Du hast es selbst gesagt, dass man für das Programm 10 Minuten braucht.

:joke:


----------



## Roberto007 (25. Mai 2011)

Nein, es ist so, im Kurs haben wir mal das Thema Arrays durchgenommen aber das ist jetzt schon ein paar Monate her und in der zwischenzeit haben wir auch nichts mehr mit denen programmiert. Ich brauch nur einen kleinen refresh indem ihr mir die zeilen schreibt wie man dieses chararray erstellt und dann versteh ich wieder wie man mit denen arbeitet.


----------



## XHelp (25. Mai 2011)

```
char[] deinarray = "hierstehtwas".toCharArray()
```
Und in wie fern bringt es dich weiter? Wenn die so viel Theorie fehlt, dann hol die erstmal nach. Du wirst doch wohl irgendwelche Notitzen im Unterricht gemacht haben, die du jetzt nachlesen kannst.


----------



## ARadauer (25. Mai 2011)

Roberto007 hat gesagt.:


> anstatt mir Vorwürfe zu machen könntest du auch so nett sein und mit sagen was ich schreiben muss um so ein CharArray zu erstellen.





ARadauer hat gesagt.:


> und aus dem strings mit toCharArray() ein char array machen...



mach ich doch ???:L toCharArray() ist eine Methode von String


----------



## Roberto007 (25. Mai 2011)

XHelp hat gesagt.:


> ```
> char[] deinarray = "hierstehtwas".toCharArray()
> ```
> Und in wie fern bringt es dich weiter? Wenn die so viel Theorie fehlt, dann hol die erstmal nach. Du wirst doch wohl irgendwelche Notitzen im Unterricht gemacht haben, die du jetzt nachlesen kannst.



Wenn du wüsstest welchen Professor wir da haben dann könntest du auch keine Notizen aufschreiben^^ und um Theorie jetzt nachzuholen geht sehr sehr schlecht denn die Examenszeit hat angefangen und ich bin nur noch am lernen. Deshalb hab ich euch ja gefragt im besten Fall die ganze Aufgabe zu mache, so würdet ihr mich wirklich entlasten...


----------



## Marcinek (25. Mai 2011)

Siehe meine PM :applaus:


Entlasung gegen €€€


----------



## XHelp (25. Mai 2011)

Roberto007 hat gesagt.:


> Wenn du wüsstest welchen Professor wir da haben dann könntest du auch keine Notizen aufschreiben


Habe noch von keinem Prof gehört, der vor der Vorlesung den Studenten die Arme abhackt oder alle Stifte klaut :bahnhof:


> Deshalb hab ich euch ja gefragt im besten Fall die ganze Aufgabe zu mache, so würdet ihr mich wirklich entlasten...


Wie gesagt, du wirst schon jemanden in der Jobbörse finden. Aber wenn du willst, dass jemand deine Arbeit macht, dann solltest du für diese Arbeit auch bezahlen, wie es überall üblich ist.


----------



## muckelzwerg (25. Mai 2011)

Du hast zwei Möglichkeiten.
Entweder Du lernst erstmal Java und löst Dein Problem dann mit etwas Unterstützung oder allein.
Das ist der schnelle Weg.
Oder Du bröselst/jammerst/nervst solange im Internet rum, bis Du eine Lösung geschenkt bekommst/irgendwo zocken kannst.
Dann fliegst Du bei der nächsten Aufgabe noch härter auf die Fresse und es geht wieder los.
Wenn Du das dann weiter durchziehst und in anderen Bereich machst, fährst Du Deine Ausbildung (was auch immer Du da machst) an die Wand und die ganze Zeit war verschwendet. Ob Du dann anschließend nochmal Java lernst, spielt keine Rolle.
Das ist der langsame Weg.

Es geht bei solchen Aufgaben nicht um die Lösung, sondern darum, dass Du lernst die Lösung zu entwickeln. Wenn Du da noch ein paar Fehlerchen hättest, wäre das überhaupt kein Problem.
Aber die Aufgabenstellung hinschreiben und dann "öh, geht nicht" zu sagen ist 0% Leistung.
Es interessiert auf der ganzen Welt keinen Schwanz, welche Lösung Du für diese Aufgabe abgibst. Meinst Du Dein Lehrer schert sich auch nur eine Sekunde länger um Deine Noten, als er es muss?

Solange Du nicht von selbst auf die Idee kommst, dass es um den Weg geht und darum, sich Fähigkeiten anzueignen, kann Dir niemand bei irgendwas helfen. 
Das ist hier als würdest Du Dich auf die Autobahn werfen und nach mehmaligem Überfahren sagen "kann mir jemand helfen, ich soll auf die andere Seite".
Als Antwort bekommst Du dann "da drüben kannst Du eine Brücke bauen, versuch es damit".
- "Ich kann aber nichts bauen, weiß gar nicht wo ich anfangen soll"
Setz halt mal ein paar Steine aufeinander und mach einen Sockel für die Brücke.
- "Ich sitz jetzt schon seit einer halben Stunde daran, es geht nicht. Kann mir jemand helfen? Wie benutzt man Steine?"
Mit "Stein[] Mauer = "Bauplan".toSteinMauer()"
...


Was denkst Du da eigentlich über unsere Arbeit? Einige hier verdienen ihr Geld mit Javaprogrammierung. Glaubst Du jemand der trotz Vorlesung und X Stunden Heimarbeit, die im Lehrplan fest drinstehen "Null Ahnung" hat, schüttelt einfach mal so ein Programm aus dem Ärmel, ohne Nachzudenken oder zu Lernen?
Du gehst doch auch nicht zum Schreiner und sagst "ey man, zeig mir doch nur wo die Säge angeht, den Schrank mach ich dann schon". 


Wenn Du Java bisher schon gelernt hast, dann müsstest Du die Aufgabe und das Programm verstehen können. Dann müsstest Du in der Lage sein, passende Funktionen zu benennen und die allgemeine Struktur einer Lösung hinschreiben können.
Dann müsstest Du auch konkret an einem Punkt ansetzen und dort nach Hilfe fragen können.
Wenn Du das nicht kannst, dann hast Du nicht genug Java gelernt und musst das nachholen. 

Das ist ein Problem von Soll und Haben.
"Ich sollte Java lernen, hab es aber nicht."


----------



## Roberto007 (25. Mai 2011)

XHelp hat gesagt.:


> Habe noch von keinem Prof gehört, der vor der Vorlesung den Studenten die Arme abhackt oder alle Stifte klaut :bahnhof:
> 
> Wie gesagt, du wirst schon jemanden in der Jobbörse finden. Aber wenn du willst, dass jemand deine Arbeit macht, dann solltest du für diese Arbeit auch bezahlen, wie es überall üblich ist.



Ich soll also 15Euro bezahlen für 10beschissene Zeilen? Das ist echte Verarschung! Na dann such ich mir eben ein anderes Forum -.-


----------



## muckelzwerg (25. Mai 2011)

Du sollst gar nichts. Ist uns doch egal. Und das mein ich überhaupt nicht böse. Wir kennen Dich halt kein Stück.
Nimm die "Wucherpreise" doch als Argument, um es selbst zu schaffen. Dann kannst Du den Abzockern eine lange Nase machen, oder für weniger Geld das gleiche anbieten.


----------



## ARadauer (25. Mai 2011)

Roberto007 hat gesagt.:


> Ich soll also 15Euro bezahlen für 10beschissene Zeilen? Das ist echte Verarschung! Na dann such ich mir eben ein anderes Forum -.-



Naja... du zahlst ja nicht € 15 für die 10 Zeilen sondern, dafür den Aufwand den jemand hatte sich das Wissen aufzubauen um die 10 Zeilen zu schreiben ;-)

Was ich als proffesioneller Software Entwickler mit einem Stundensatz von € 70 - € 100 soll dir faulen Sack die Hausübung schreiben? Das ist echte Verarschung! Na dann such ich mir eben andere Forum User die konkrete Fragen stellt und Tipps und Hilstestellungen gewissenhaft ließt und versuchen das Gelesene auch zu verstehen :toll:


----------



## Noctarius (25. Mai 2011)

Hätte man nicht schöner sagen können  Spontan fallen mir da auch nur wieder die 5 1/2 Stufen zum Erschleichen einer Lösung ein wenn ich das hier so lese.



> "Theorie jetzt nachzuholen geht sehr sehr schlecht denn die Examenszeit hat angefangen und ich bin nur noch am lernen"



Dann hätte man eher anfangen sollen...


----------



## freak_007 (25. Mai 2011)

durch String.charAt kannst du es auch erreichen zeichenweise zu lesen.


----------

