Autor Thema: Anzahl der Zeichen in einem Textfeld!!!  (Gelesen 15124 mal)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #20 am: 30.09.05 - 16:42:49 »
Hast Du noch einen Tipp wie ich Notes sage dass in dem Feld txtProblemPre kein Zeilenumbruch stattfinden darf?

Hi,

das kannst du auf diese Art lösen.
...
'Prüfung ob im Feld txtProblemPre Zeilenschaltungen enthalten sind.
If Instr(doc.txtProblemPre(0), Chr$(13)) > 0 Then
  Messagebox "Im Feld txtProblemPre darf keine Zeilenschaltung enthalten sein." _
      & Chr$(10) & "Das Dokument kann nicht gespeichert werden.",   48, "Adressen - Warnung"
  Call uidoc.GotoField("txtProblemPre")
  Continue = False
  Exit Sub
End If  'If Instr(doc.txtProblemPre(0), Chr$(13)) > 0 Then
...


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #21 am: 30.09.05 - 23:41:33 »
vielen Dank für Deine Lösung. Habe nun einmal die Formel getestet leider bringt er mir folgenden Fehler:

ProblemDescriptionNoUpdate: Querysave: 19: Not a sub or function name: UIDOC

Hab jetzt nicht den ganzen Thread gelesen, aber poste doch mal die Zeile wo der fehler auftitt, oder alternativ den kompletten Code des Querysave (inkl. Zeilenangabe wo Fehler auftritt). Könnte z.B. ein fehlender Punkt sein bei einem Call uidoc.irgendwas.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #22 am: 01.10.05 - 00:46:20 »
'Prüfung ob im Feld txtProblemPre Zeilenschaltungen enthalten sind.
If Instr(doc.txtProblemPre(0), Chr$(13)) > 0 Then
  Messagebox "Im Feld txtProblemPre darf keine Zeilenschaltung enthalten sein." _
      & Chr$(10) & "Das Dokument kann nicht gespeichert werden.",   48, "Adressen - Warnung"
  Call uidoc.GotoField("txtProblemPre")
  Continue = False
  Exit Sub
End If  'If Instr(doc.txtProblemPre(0), Chr$(13)) > 0 Then
...

Hi, Axel,
irgendwie hast Du da jetzt aber eine Widerspruch drin mit einmal Chr$ (13) und dann Chr$ (10). Code 10 (dezimal) ist der normal verwendete in Notes. 13 kann aber auch vorkommen (vorrangig von aussen - Notes ist da "grosszügig" ;-) - daher sollte man beide Codes abfragen.

@Steffen: Woher Fehler wie der von Dir beschriebene kommen, sollten Dir aber mittlerweile klar sein. Wenn der Compiler oder der Interpreter ein deklariertes Objekt nicht finden, ist das doch in der Regel der einfachst lösbare Fall ("wo und wie habe ich das überhaupt deklariert ?").
Ich denke, dies ist das Problem von übernommenen Code, den man nicht wirklich verstanden hat. Im wirklichen (Programmierer-)Leben ist sowas kreuzgefährlich !

Bernhard

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #23 am: 01.10.05 - 00:55:10 »
Soviel ich weiss ist der Standardzeilenumbruch in Windows
Chr$(13) + Chr$(10)

auf unix und linux:
Chr$(10)

http://www.oreilly.de/catalog/mcosxhksger/chapter/hack05.html
Zitat
Es gibt drei verschiedene Arten von Zeilenumbrüchen, die ursprünglich jeweils einem der großen Betriebssysteme zuzurechnen waren: Windows/DOS, Macintosh und Unix. Ein Dokument mit Mac-Zeilenumbrüchen sieht auf einem Windows-System grässlich aus, und ein Dokument mit Windows-Umbrüchen wird von Unix auch nicht korrekt interpretiert. Der Grund dafür besteht darin, wie der Zeilenumbruch erstellt wird. Der Mac bedient sich standardmäßig eines einfachen Carriage Returns (<CR>), dargestellt als \r. Unix hingegen verwendet einen einfachen Zeilenvorschub (<LF> für engl. line feed), dargestellt als \n. Windows geht einen Schritt weiter und verbindet beide (<CRLF>) zu der Kombination \r\n.

Viele Windowsprogramme verstehen aber heutzutage auch chr$(10) -> z.B. Lotus Notes.
Windows Notepad meines wissens nicht. Wordpad aber schon.

\r -> 13 (CR)
\n -> 10 (LF)
Code
public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String test = "\r\n";
		char[] someChars = test.toCharArray();
		for (int i=0; i<someChars.length; i++) {
			System.out.println((long)someChars[i]);
		}

	}

}
printet:
13
10

« Letzte Änderung: 01.10.05 - 01:07:42 von kennwort »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #24 am: 01.10.05 - 01:23:25 »
Axel, das einfachste ist (so habe ich das auch getan), mal ein Textfeld und ein RichText-Feld aus einem NotesDocument Zeichenweise auszugeben, wenn dort ein Zeilenumbruch eingefügt wurde. Du findest dort Dec 10 als Standardcode von Notes.
Importierst Du aber zum Bleistift Daten aus Excel, ist der Umbruch gekennzeichnet durch Dez 13. In Textfeldern okay, in RTIs gibt es aber statt einem Umbruch ein Ersatzzeichen und keinen Umbruch. Daher filtere ich schön ASCII-gemäss immer nach Dec 10 und Dec 13 und war bisher immer auf der sicheren Seite. Die Zeiten der eigentlichen Bedeutungen von ASCII 10 = Zeilenvorschub und ASCII 13 = Wagenrücklauf sind ja längst vorbei ...

Bernhard

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #25 am: 01.10.05 - 11:52:53 »
Hi, Axel,
irgendwie hast Du da jetzt aber eine Widerspruch drin mit einmal Chr$ (13) und dann Chr$ (10). Code 10 (dezimal) ist der normal verwendete in Notes. 13 kann aber auch vorkommen (vorrangig von aussen - Notes ist da "grosszügig" ;-) - daher sollte man beide Codes abfragen.

Jein. Chr$10 verwende ich eigentlich immer wenn es um mehrzeilige Messsageboxen geht. (eigentlich weil, ich auch schon einige Messagebox-Texte mit Chr$(13) gefunden habe  :o  ).

Bisher bin ich mit der Abfrage nur nach Chr$(13) ganz gut gefahren. Ich habe damals, als der Code entstand, einiges getestet und Chr$(13) war das einzigste was richtig und immer funktioniert hat. Sicherlich schadet es nichts noch auf Chr$(10) zu prüfen.

Hi Axel,

vielen Dank für Deine Lösung. Habe nun einmal die Formel getestet leider bringt er mir folgenden Fehler:

ProblemDescriptionNoUpdate: Querysave: 19: Not a sub or function name: UIDOC

Gruß
Steffen

Hier fehlt die Deklaration der Variablen uidoc. Du kannst anstatt der Variablen uidoc auch die Variable Source nehmen. Die ist in den meisten Maskenevents bereits vorhanden.

Das Beispiel war ein Auszug aus einem kompletten QuerySave-Event - Script und nur als Denkanstoß gedacht und nicht als fertige Lösung. Ich bin eigentlich davon ausgegangen, dass du weißt, wo und wie man die benötigten Variablen deklariert und initialisiert.

Axel
 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #26 am: 02.10.05 - 00:09:53 »
Hi Axel,

ich habe eben einer meiner Standardroutinen (man verwendet die ja - leider - irgendwann dann doch ohne weiteres Nachdenken) nochmal geprüft. Die Routine soll in bestimmten und hierfür relevanten Textfeldern die Eingabe einer Zeilenschaltung verhindern (Aufruf der Routine im Querysave, der Ausschnitt stammt aus einer Function namens ValidateMandatoryFields - der Function-Name sagt sicherlich alles):

Code
	'In the following fields carriage returns are not allowed:
	For iLoop = 0 To Ubound (aNoCR)
		szTemp = uidocCurrent.FieldGetText (aNoCR (iLoop))
		If Instr (szTemp, Chr$ (10)) > 0 Or Instr (szTemp, Chr$ (13)) > 0 Then
			Messagebox "Im Feld '" & aNoCR (iLoop) & "' sind keine Zeilenschaltungen erlaubt !", MB_ICONEXCLAMATION, "Eingabefehler"
			Call uidocCurrent.GotoField (aNoCR (iLoop))
			Exit Function
		End If
	Next

Egal, ob ich in der betreffenden Zeile jetzt den Check auf 10D oder 13D auskommentiere - die Prüfung schlägt immer zu.

Ich muss nochmal nachvollziehen, wie Notes in den einzelnen Situationen die Werte verwendet: In LS reicht für einen Zeilenumbrauch (auch in einem RTI) immer 10D, aber ich bin mir sicher, bei @functions braucht es statt dessen irgendwo ein 13D (@Prompt ?). Die Eingabe im FrontEnd erzeugt aber offensichtlich beide Werte (was ja auch "ASCII-mässig" korrekt wäre (LF + CR).

(Wirklich) Übel, dass irgendwann die Routine dazu führt, dass man nicht mehr genau weiss, wie es denn nun genau funktioniert ...

Bernhard

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #27 am: 02.10.05 - 07:06:22 »
(was ja auch "ASCII-mässig" korrekt wäre (LF + CR).
muss insistieren. Das hat nichts mit ASCII zu tun sondern ist ein reiner Microsoft Standard.
In Unix gibt es das nicht.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #28 am: 02.10.05 - 22:59:16 »
Axel, ich glaube nicht, dass das was mit LS zu tun hat. Lass Dir mal "Line feed" und "Carriage return" auf der Zunge zergehen ... Ich habe das bei der Steuerung von Druckern (oder programmierbaren Schreibmaschinen im weiteren Sinne) erstmals kennengelernt, und welches OS auf den Kisten, an denen diese Teile angeschlossen waren, war diesen LPTs sowas von egal  ;)

Bernhard

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #29 am: 02.10.05 - 23:56:56 »
Ich behaupte nicht das das was mit LotusScript zu tun hat.
Ich weiss nur, dass ich mir in der Vor-Eclipse-Code viele Java Source Dateien in Notepad angeschaut habe. Notepad versteht nur den Microsoft Standard Carriage Return Linefeed als Zeilenumbruch. Je nachdem wie die Dateien ursprünglich erstellt waren, sah man da auf Notepad manchmal einfach keine Zeilenumbrüche.
Deshalb bin ich ein Anhänger dieser Theorie:
http://www.oreilly.de/catalog/mcosxhksger/chapter/hack05.html
Zitat
Code
Es gibt drei verschiedene Arten von Zeilenumbrüchen, die ursprünglich jeweils einem der großen Betriebssysteme zuzurechnen waren: Windows/DOS, Macintosh und Unix. Ein Dokument mit Mac-Zeilenumbrüchen sieht auf einem Windows-System grässlich aus, und ein Dokument mit Windows-Umbrüchen wird von Unix auch nicht korrekt interpretiert. Der Grund dafür besteht darin, wie der Zeilenumbruch erstellt wird. Der Mac bedient sich standardmäßig eines einfachen Carriage Returns (<CR>), dargestellt als \r. Unix hingegen verwendet einen einfachen Zeilenvorschub (<LF> für engl. line feed), dargestellt als \n. Windows geht einen Schritt weiter und verbindet beide (<CRLF>) zu der Kombination \r\n.
Das hat sich natürlich mittlerweile ziemlich relativiert, da z.B. ein Programm wie Textpad oder Wordpad (ist nicht Notepad) natürlich auch unix/linux und Mac-Zeilenumbrüche versteht.

ASCII ist für mich einfach ein Mapping von 2 ^7 in Binärform dargestellter positiver natürlicher Zahlen (?) auf bestimmte Zeichen. In Ascii ist aber nicht definiert, ob jetzt ein Zeilenumbruch durch carriage return, line feed oder beides dargestellt wird. Vielmehr haben aus meinen Verständnisse verschiedene Betriebssysteme unterschiedliche "Haus"-Standards.
Ascii ist
0000 1101 ist carriage return
0000 1010 ist line feed

Betriebssystemstandard (eine Abstraktionsebene dadrüber) ist
Zeilenumbruch heisst:
carriage return + line feed (Windows)
carriage return (Mac)
line feed (linux/unix)

Das Programme wie TextPad, Wordpad, Eclipse, Notes auf Windows auch die Hausstandards von Mac und Linux/Unix mitunterstützen ist für mich ein Zugeständnis an Interoperabilität von Betriebssystemen.

Durch die zunehmende Verbreitung von unicode und xml/webservices tauchen in diesem Kontext auch aktuell immer wieder Fragen auf. Da spielt das encoding nämlich eine Rolle. Ich bin da manchmal auch am grübeln, hab das aber im Griff.

Wenn du dir ein txt file im Hex-Editor anschaust, da steht dort meines Wissens nirgendwo, ob dies im ASCII Standard, ISO-8859-1, UTF-8 oder in Unicode 4.0 encodiert ist. In UTF-8 sind manche Zeichen 16 bit, andere 8 bit. ASCII ist 7bit, ISO-8859-1 ist 8 bit, UTF-8 ist manchmal 8, manchmal 16 bit. Unicode 4.0 ist manchmal 16 bit, manchmal 32 bit.

Auf einer tiefen technischen Ebene enthalten ja Dateien rein nur binäre Zeichenfolgen. Die Programme, die txt-Dateien darstellen, machen eine reine Annahme, mit welchem Zeichensatz-Mapping die binäre Zeichenkette als characters angezeigt wird.
In xml steht aber z.B. das encoding direkt in dem xml declaration Element.
Code
<?xml encoding="ISO-8859-1"?>
<root>
<element>value</element>
</root>

Manchmal haben Leute Probleme, wenn sie nicht die korrekte Vorstellung von Text-Dateien als binäre Zeichenfolgeketten. Die als korrekt (oder inkorrekt) empfundene Anzeige in Zeichen hängt dann rein von diesen  impliziten oder expliziten byte -> character Mapping-Tabellen-Standards ab.  ;D

Axel
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #30 am: 04.10.05 - 09:29:40 »
Kann mir trotzdem jemand sagen wie ich dies nun deklariere?

Set uidoc = source.Document
Call uidoc.refresh()




So eigentlich gar nicht.

Mit Set uidoc = Source.Document initialisierst du die Variable uidoc als Objekt der Klasse NotesDocument. 

Mit Call uidoc.Refresh rufst du eine Methode aus der Klasse NotesUIDocument auf.

Da passt nicht zusammen.

Die Variable uidoc und die Set... - Anweisung brauchst du nicht. Mit der Variable Source hast du alles was du brauchst.

Mit Call Source.Refresh() kannst du das Dokument aktualisieren.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #31 am: 04.10.05 - 10:02:11 »
Hi,

natürlich musst du alle Vorkommen der Variable uidoc ändern.

   If Instr(doc.txtProblemPre(0), Chr$(13)) > 0 Then
      Messagebox "Im Feld txtProblemPre darf keine Zeilenschaltung enthalten sein." _
      & Chr$(10) & "Das Dokument kann nicht gespeichert werden.",   48, "Adressen - Warnung"
      Call Source.GotoField("txtProblemPre")
      Continue = False
   End If


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Anzahl der Zeichen in einem Textfeld!!!
« Antwort #32 am: 04.10.05 - 10:03:56 »
Nun hat Axel sich schon soviel Mühe gegeben, aber Du scheinst es trotzdem einfach nicht gelesen zu haben ...
Wenn Du (mit was auch immer) programmieren willst, musst Du einfach von selbst darauf kommen, dass das Objekt "uidoc" von Dir weder deklariert noch instantiiert wurde.

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz