mikrocontroller.net

Forum: PC-Programmierung Java Datenauslesen + Bcc berechnen


Autor: Topal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin Moin,

ich bin etwas VIEL überfordert. Und zwar habe ich folgendes Problem und 
hoffe auf Hilfe?!
Ich habe hier einmal zwei Scripte das eine ist von einem Freund das 
andere aus dem Netz. Leider habe ich von Programmierung Null ahnung.

Datensatz auslesen:
import java.io.*;

public class LeseAusDatei {

  public static void main (String[] args) throws IOException{
     byte zeichen;
     char buchstabe;
     String text = "";
     String dateiName = "PAT_HIMED0000002295.DAT";
     FileInputStream leseStrom = new FileInputStream(dateiName);
     do{
       zeichen = (byte)leseStrom.read();
       text += (char)zeichen;
     } while (zeichen !=-1);
     leseStrom.close();
     System.out.println(text);
  }
}

BCC Berechnung: (vom Freund)
package tp;

public class BCCBerechner {
  public static void main(String[] args) {
    String eingabe = "DN09111110300380002792002210002518033411 BGabriele Schilles Krähenwegweg 42 Mustertal 52115 2B";
    int erg = 0;
    for (int i = 0; i < eingabe.length(); i++)
      erg = erg ^ eingabe.charAt(i);
    System.out.println("Ergebnis(dezimal): " + (erg ^ 3));
  }
  
}
Das Funktioniert auch soweit.

Nun bräuchte ich die möglichkeit das automatisch nach einlesen des 
Datensatzes der BCC berechnet wird.

Könnte mir da evtl. jemand Helfen?

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
import java.io.*;

public class LeseAusDateiund BerechneBCC {

  public static void main (String[] args) throws IOException{
     byte zeichen;
     char buchstabe;
     String text = "";
     String dateiName = "PAT_HIMED0000002295.DAT";
     FileInputStream leseStrom = new FileInputStream(dateiName);
     do{
       zeichen = (byte)leseStrom.read();
       text += (char)zeichen;
     } while (zeichen !=-1);
     leseStrom.close();
     String bcc = StringBCCBerechner(text);
     System.out.println(bcc);
  }

  public static StringBCCBerechner (String text) {
    int erg = 0;
    for (int i = 0; i < text.length(); i++)
      erg = erg ^ eingabe.charAt(i);
    System.out.println("Ergebnis(dezimal): " + (erg ^ 3));
  }
}

ode rso irgendwie. nicht getestet, grad nur auf die schnelle 
zusammengeklickt ...

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...
Zu schnell auf ok geklickt:
  public static StringBCCBerechner (String text) {
    int erg = 0;
    string result:
    for (int i = 0; i < text.length(); i++)
      erg = erg ^ eingabe.charAt(i);
     result = (erg ^ 3).toString();
    return result;
  }

Autor: Topal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie soll ich das nun genau zusammen packen? Verstehe ich nicht so ganz.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erm... wieso fängst du dann nicht an dich damit zu beschäftigen? So wird 
das doch nix. Zumal das "Auslesebeispiel" auch noch unnötig viele Casts 
enthält und nach dem ende der Datei am Schluss ein falsches Zeichen 
anhängt...

Autor: Topal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil ich SI bin und kein AE. Programmierung ist einfach nicht mein ding!
Habe schön öfter versucht mich da einzuarbeiten es ist aber ein Buch mit 
7 Siegeln. Mein Chef verlangt halt von mir das ich das mache auch wenn 
es nicht mein Job ist. Da ich Null Peil habe versuche ich eine andere 
Lösung zu finden. Das das so scheiße ist ist auch mir klar...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Topal schrieb:
> Weil ich SI bin und kein AE.

Erleuchte uns: Wie meinen?

Autor: Topal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Systemintegrator und kein Anwendungsentwickler!

Autor: Rogie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
import java.io.*;

public class LeseAusDatei {

  public static void main (String[] args) throws IOException{
     byte zeichen;
     char buchstabe;
     String text = "";
     String dateiName = "PAT_HIMED0000002295.DAT";
     FileInputStream leseStrom = new FileInputStream(dateiName);
     int erg = 0;

     do{
       zeichen = (byte)leseStrom.read();
       erg ^= zeichen;

     } while (zeichen !=-1);
     leseStrom.close();
     System.out.println(""+erg);
  }
}

Autor: Topal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erstmal für den quell Text. Aber leider liefert er mir Minuswerte.

Habe ihn mir einwenig angeschaut und bissel mit meinem wenigen können 
geändert.
import java.io.*;

public class LeseAusDatei {

  public static void main (String[] args) throws IOException{
     byte zeichen;
     char buchstabe;
     String text = "";
     String dateiName = "PAT_HIMED0000002295.DAT";
     FileInputStream leseStrom = new FileInputStream(dateiName);
     int erg = 0;
          
     while ((zeichen = (byte) leseStrom.read()) != -1)
         erg = erg ^ zeichen;
     leseStrom.close();
     System.out.println(""+ (erg ^3));
  }
}

Ich bin nun bei Schritt 2 angekommen bei dem die ausgelesen werte in ein 
Verzeichnis auf C geschrieben werden sollen.
import java.io.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class LeseAusDatei {

  public static void main (String[] args) throws IOException{
     byte zeichen;
     char buchstabe;
     String text = "";
     String dateiName = "PAT_HIMED0000002295.DAT";
     FileInputStream leseStrom = new FileInputStream(dateiName);
     int erg = 0;
     byte [] text2Bytes = dateiName.getBytes();         
     
     String dateiName1 = "c:\\Sicherung\\test.DAT";         
     
     FileOutputStream fos = new FileOutputStream(dateiName1);   
     fos.write(text2Bytes);                   
     
     while ((zeichen = (byte) leseStrom.read()) != -1)
         erg = erg ^ zeichen;
     leseStrom.close();
     System.out.println(""+ (erg ^3));
  }
}

Leider Schreibt er mir immer in das angegebene Verzeichnis in die .dat 
Datei die erstellt wird "PAT_HIMED0000002295.DAT"
Was mir auch klar ist das das passiert, aber ich habe keine ahnung was 
ich ändern müsste damit er mir den Inhalt der PAT_HIMED0000002295.DAT 
Datei sichert. Kann mir da evtl. jemand Helfen?

gruß

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist überhaupt nicht klar was du jetzt sichern willst. Aber was macht 
eigentlich ein "SI" aus?

Etwas mitdenken kann man doch bestimmt auch in diesem Bereich erwarten.

Die Leseroutine ist jetzt korrekt, (das byte muss da noch weg) aber wenn 
du:
byte [] text2Bytes = dateiName.getBytes();
Aufrufst, dieses in eine neue Datei schreibst und dich ersthaft wunderst 
warum du den Inhalt von dateiName (nämlich *PAT_HIMED0000002295.DAT* wie 
oben zugewiesen) in deiner neuen Datei erhältst weiß ich ehrlich gesagt 
nicht mehr weiter...

Auf diese weise schreibst du alles was in der Ursprungsdatei ist 
gleichzeitig in die neue Datei:
while ((zeichen = leseStrom.read()) != -1) {
         erg = erg ^ (zeichen 0xFF);
         fos.write(zeichen)
}
Wenn du das Ergebnis in eine Datei schreiben willst dann solltest du 
eben das Ergebnis statt per System Out auszugeben eben in die neue Datei 
schreiben.

Wieso sträubst du dich so davor einfach mal ein paar Tutorials über Java 
durch zuarbeiten, vielleicht wird dann einiges klarer.

Und klar können dir hier viele Leute helfen, nur normalerweise bezahlt 
man Leute dafür das sie die Arbeit von anderen tun die Sie selbst nicht 
auf die Reihe kriegen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.