Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Habe ein Programm zum komprimieren einer Datei.txt geschrieben und die klappt auch ohne Probleme. Jedoch möchte ich nun das Programm rückgängig programmieren. Also eine "komprimierte" Datei zu dekomprimieren, jedoch hänge ich da ein bischen. Könntet ihr mir da Bitte helfen ?
Hier ist das Programm zum Komprimieren. Was muss ich da ändern um eine Datei.txt dekomprimieren zu können ?
Danke
Java:
import java.io.File;
import java.io.FileInputStream;
public class komprimieren {
public static void main(String[]args)
{
String dateiName = "unkomprimiert.txt";
File meineDatei = new File(dateiName);
try{
FileInputStream fis = new FileInputStream(meineDatei);
int fr=0;
int act=fis.read();
while(fr!=-1)
{int zaehler =1;
while (act==(fr=fis.read())){zaehler++;}
System.out.print((char)act);
System.out.print(zaehler+" ");
act=fr;}
} catch(Exception e){}
}
}
Erinnert mich etwas an:
Coder1: Hey, ich habe ein Archiv-Algo entwickelt, welches jede beliebige Datei auf 5 bytes komprimiert
Coder2: Ui, das ist super!
Coder1: Ja, aber beim Entpacken happert es im Moment
:joke:
Wenn ich es richtig sehen sieht deine komrpimierte Datei so aus:
Code:
a1 b2 c1 d5
Was bedeuten würde:
Code:
abbcddddd
(ganz davon mal abgesehen zweifle ich an der komprimierenden Wirkung des Algos)
Also ließ doch ein Char ein und anschließend die Zahl bis zum Leerzeichen, dann schreib X mal diesen Char hin.
Ja die Überlegung die einzelnen Buchstaben mit der Zahl daneben zu multiplizieren hatte ich auch schon , jedoch ist mein Problem dies im Java umzusetzen.
Ich muss dem Programm sagen er soll bis zur Leerstelle lesen, und dann die Zahl die vor der Leerstelle steht mit dem Buchstaben vor der Zahl ( zwei Stellen vor der Leerstelle ) multiplizieren. Aber wie kann ich das in Java ausdrücken ? Und woher weiss dass Programm das nach dem ersten A1 noch vielleicht B23 und C3 kommt ?
Was willst du da multiplizieren? :bahnhof:
Bei der Aufgabe wäre RegEx angebracht:
Code:
(.)(\d+)\
Dann kriegst du auch das Zeichen und die Anzahl zurückgeliefert. Wie du das Zeichen dann n mal ausgibst solltest du auch so wissen, wenn du den Code selber geschrieben hast.
"Ich bin kein Sprachprofessor, was euch sicherlich aufgefallen ist"
"i1c1h1 b1i1n1 k1e1i1n1 s1p1r1a1c1g1p1r1o1f1e1s2o1r1....."
irg wo seh ich da keine kompermierung ^^ sieht mehr so nach brain**** dialekt aus
Naja, kommt eben darauf an was da für eine Datei sein. Aber es gibt nichts darüber zu diskutieren ohne mehr Informationen zu haben. Der TO wird schon wissen, was er macht.
wenn in diesem (obskuren, ich denke zu lernzwecken entworfenen) spezifizierten format NUR buchstaben bzw nicht numerische zeichen vorkommen, und das wirklich die aufgabe ist, sollte es in diesem speziellen fall ja auch etwas platz sparen
aaaaabbbbbccccc ist ja augenscheinlich auch länger als a5b5c5
und eigentlich ist das doch
einzelne zeichen lesen, ein char weiter schauen wie oft er vorkommt und das in die datei schreiben.
wenn in diesem (obskuren, ich denke zu lernzwecken entworfenen) spezifizierten format NUR buchstaben bzw nicht numerische zeichen vorkommen, und das wirklich die aufgabe ist, sollte es in diesem speziellen fall ja auch etwas platz sparen
Ja, ich bin auch zuerst zu der Meinung gekommen, dass es mit Zahlen ein Problem sein würde
Ich halte es immer noch für den "einfachsten" Weg den Scanner auf den RegEx von oben anzusetzen und einfach nur abzulesen.
Probier es aus?
Dabei wirst du vermutlich merken, dass du Scanner falsch benutzt (sofern filename das ist, was der Name vermuten sollte) und dass der RegEx falsch ist. Was hast du dir bei dem RegEx gedacht?
Du hast ja ein völlig anderen aufbau als in dem Beispiel. Darüber hinaus steht paar Zeilen weiter oben in den Javadocs wie du Scanner richtig mit einer Datei verwendest.
Einen möglichen RegEx habe ich dir schon oben geschrieben. Darüber hinaus solltest du dir noch mal die Arbeit mit den regulären Ausdrücken anschauen.