Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

ich hoffe hier kennen sich einige mit Cobol aus. :rolleyes:

Ich weiß das Cobol alt und verhasst ist, aber in Banken wird es immernoch eingesetzt.

Ich hab folgendes Problem:

Ich habe ein paar Änderungen an einem Programm gemacht, die syntaktisch auch richtig sind, nur gibt es das Problem, das ich ein "ß" durch "ss" ersetzen muss und das unabhängig von den vorhergehenden oder nachstehenden Zeichen. Es funktioniert aber nicht, da ich anscheinend nicht ein Zeichen durch 2 ersetzen kann.

Hat einer ne Idee wie ich das beheben kann??

Geschrieben

Hallo,

warum solltest du das nicht ersetzen können? Ich weiß zwar nicht ob es in Cobol dafür einen extrigen Befehl gibt, aber dann machst du das halt händisch über Feldgruppen. Wie machst du denn das momentan?

Zeig mal deine Quelle!

Geschrieben

schreib die ne kleine regEx, die ß durch ss ersetzt und lass den quellcode durchlaufen.

bigredeyes

p.s. im netzt gibt es viel regEx-trainer for free mit denen du übern kannst und das ergebnis gleich siehst.

oder ein java/c++7vb/c#-paar zeiler.

quellcode in string einlesen

string.replaceAll("ß", "ss");

string zurückschreiben.

fertig

Geschrieben
Hallo,

warum solltest du das nicht ersetzen können? Ich weiß zwar nicht ob es in Cobol dafür einen extrigen Befehl gibt, aber dann machst du das halt händisch über Feldgruppen. Wie machst du denn das momentan?

Zeig mal deine Quelle!

Cobol meckert da, weil ich ein Zeichen (ß) durch 2 Zeichen (ss) ersetzen will, das lässt Cobol nicht zu.

Ich mache das ja monentan nicht anders. Ich suche nach der Lösung des Problems.

Ein kleiner Codeausschnitt des Statements:

INSPECT P-ORT REPLACING "ß" BY "ss"

Und genau so funzt des net... :(

Geschrieben

Hy,

hierfür wirst du dich ein bischen Strecken müssen. Mit INSPECT REPLACING.. kann meines Wissens nur 1 zu 1 ausgetauscht werden. Ich denke du solltest das über 2 Feldgruppen(ARRAY) machen.

Zeichen für Zeichen lesen, prüfen und in neue Feldgruppe wegschreiben. Bei einem "ß" halt "ss" einfügen.

Ein wenig komplizierter wird es von "ss" auf "ß", da du hier bei jedem "s" erst prüfen musst ob ein weiteres "s" kommt.

Ich hoffe ich konnte Dir weiterhelfen.

Catweezle

Ps.: Zeig doch mal was du schon hast!

Geschrieben

damit hast du Recht das so nur 1 zu 1 ausgetauscht werden kann. Deswegen such ich ja ne andere Lösung für das Problem. Zum Glück muss ich das nicht wieder rückwärts machen (also von ss nach ß)!

Geschrieben

Habs jetzt scheinbar geschafft.

Hab den String auseinander genommen mit DELIMITED BY "ß" INTO S1 S2 und dann das "ss" in den String eingebaut. Laut Compiler geht das auch...

mal sehn was der Test sagt... :D

Geschrieben

Habe da mal eine andere Frage wo kommen denn die Sätze mit den ß her?

Wenn aus einer DB dann kannst du doch vielleicht versuchen da schon die ß umzuwandeln.

Hast du auch schon daran gedacht das wenn du mehrere ß in einem Satz hast, und diese dann ersetzt, das du dann durchaus auch an das Satzende deines Ausgabesatzes stoßen könntest und dir dann Teile davon Abgeschnitten werden.

Geschrieben

Das ich da ans Ende stoßen könnte hab ich berücksichtigt.

Die ganzen ß kommen nicht aus der DB sondern aus einer Datei.

Bei den ß dreht es sich um Ortsnamen ausm Ausland, die bei uns im deutschen Sprachgebrauch mir ß geschrieben werden aber im jeweiligen Land nicht. Es gibt ja nur in Deutschland ein ß und sonst nirgendwo...

Jetzt muss ich aber abfangen das mehr als 1 ß vorkommen kann. wenn es nur 1 gäbe wäre ich schon fertig habe meine routine nämlich fertig.

UNSTRING ORT-EIN DELIMITED BY ´ß´

      INTO

         HILF1

         HILF2 


STRING HILF1 DELIMITED BY SPACE

       ZEICHEN DELIMITED BY SIZE

       HILF2 DELIMITED BY SPACE

INTO ORT-AUS

Mit Zeichen ist hier eine Konstante gemeint (ss).

Geschrieben

ungetestet!

wenn du eine Schleife drum baust und zählst wieoft ein ß drin vorkommt. Also


MOVE ORT-EIN TO HILF-ORT-EIN

PERFORM UNTIL ANZAHL-FELDER = 0

  UNSTRING HILF-ORT-EIN DELIMITED BY ´ß´

      INTO

         HILF1

         HILF2 

      TALLYING IN ANZAHL-FELDER


  STRING HILF1 DELIMITED BY SPACE

       ZEICHEN DELIMITED BY SIZE

       HILF2 DELIMITED BY SPACE

  INTO HILF-ORT-EIN

END-PERFORM

MOVE HILF-ORT-EIN TO ORT-AUS

Versuche das mal vielleicht klappt es wenn ich etwas Zeit finde werde ich mir mal meine Unterlagen raussuchen und nochmal schauen.

Geschrieben

Hab ne andere Lösung gefunden:


PERFORM VARYING SATZ-IND FROM 1 BY 1 UNTIL SATZ-IND > MAX


        IF BUCHSTABEN(SATZ-IND) = ´ß´

               MOVE ERSATZ-ZEICHEN TO AUSGABE-BUCHSTABE(AUS-IND)

               SET AUS-IND UP BY 1

               SET AUS-IND UP BY 1

        ELSE

              MOVE BUCHSTABEN(SATZ-IND) TO AUSGABE-BUCHSTABE(AUS-IND)

               SET AUS-IND UP BY 1

        END-IF

END-PERFORM

Das scheint zu gehen...

Geschrieben

Was ist denn max bei dir? Du solltest nämlich beachten das wenn BUCHSTABEN und AUSGABE-BUCHSTABE z.b. pic x(30) sind und in buchstaben nun ein wort mit 28 zeichen und 3 ß drinsteht es nicht mehr in AUSGABE-BUCHSTABE passen wird. Deshalb dürfte max in dem Fall nicht 30 sein.

Außerdem kannst du folgendes


SET AUS-IND UP BY 1
SET AUS-IND UP BY 1
[/PHP]

auch in einer anweisung machen :)

Geschrieben

Ich weiß das das auch in 1 Anweisung gehen würde mit dem hochzählen. Sind halt Vorschriften hier auf der Arbeit.

Und Max ist 50. Also so lange Ortsnamen hab ich noch nie gesehen. Außerdem falls du jetzt an Ortsteile denkst, die drucken wir nicht. Sondern nur den Ort ohne Ortsteil.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...