[GastForen Programme Print/Bildbearbeitung Adobe InDesign Mehrere Buchstaben (Character) per Script markieren

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Mehrere Buchstaben (Character) per Script markieren

flingeflung
Beiträge gesamt: 40

16. Mär 2007, 11:14
Beitrag # 1 von 12
Bewertung:
(4748 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

ich möchte per Script alle Absätze meiner Story durchlaufen und dabei nach dem Vorkommen bestimmter Textmerkmale suchen. Wenn das Script fündig wird, soll der Textabschnitt markiert werden, so dass der Benutzer dann per Dialogfenster entscheiden kann, ob er ... oder ob nicht.
Es sollen also in einem Absatz mypara der Länge l>=m alle Buchstaben von Position n bis m markiert (select) werden. Wie muss der Code lauten (VB oder JS)?

Thanx :-)
X

Mehrere Buchstaben (Character) per Script markieren

zaphodbeeblebroxx
Beiträge gesamt: 408

16. Mär 2007, 11:20
Beitrag # 2 von 12
Beitrag ID: #282108
Bewertung:
(4746 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

probiers mal mit [JS]:

Code
mypara.characters.itemByRange(n,m).select(); 


zaphodbeeblebroxx


als Antwort auf: [#282102]

Mehrere Buchstaben (Character) per Script markieren

flingeflung
Beiträge gesamt: 40

16. Mär 2007, 12:38
Beitrag # 3 von 12
Beitrag ID: #282140
Bewertung:
(4735 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
*snirg*

Es funzt nicht. Wenn ich den Code nach VB transportiere, bekomme ich immer nur einen einzigen Buchstaben markiert. itemByRange habe ich schon versucht, aber ich weiß einfach die genaue Syntax nicht.
Mit
Code
set a=thispara.characters 
myInDesign.select a.itemByRange(3,5).item(1)

bekomme ich beispielsweise das erste Zeichen innerhalb der Range 3-5 markiert, also das 3. Zeichen im Absatz. VB verlangt nach itemByRange noch weitere Parameter, und die Bibliothek sagt, dass Folgende zur Verfügung stehen:
AnyItem
Count
FirstItem
Item
ItemByRange (haha)
LastItem
MiddleItem
NextItem
PreviousItem

Ich kann also mit itemByRange zwar einen Bereich im Absatz festlegen, aber ihn noch nicht mal anzeigen lassen, da z. B. die Eigenschaft 'contents' gar nicht vorhanden ist.

Wer weiß noch Rat?


als Antwort auf: [#282108]

Mehrere Buchstaben (Character) per Script markieren

zaphodbeeblebroxx
Beiträge gesamt: 408

16. Mär 2007, 14:45
Beitrag # 4 von 12
Beitrag ID: #282181
Bewertung:
(4709 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

hast Du Dir mal in der VB-Scripting-Reference die "Characters Methods" angesehen?

Ich kenne mich zwar in VB nicht so gut aus (verwende nur JS),
aber laut der Referenze müsste es so lauten:
Code
set a=thispara.characters.ItemByRange(n,m).select(); 


Also Item groß geschrieben! (Das item(1) das Du angehängt hast mach keinen Sinn!)

zaphodbeeblebroxx


als Antwort auf: [#282140]

Mehrere Buchstaben (Character) per Script markieren

zaphodbeeblebroxx
Beiträge gesamt: 408

19. Mär 2007, 09:34
Beitrag # 5 von 12
Beitrag ID: #282474
Bewertung:
(4662 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

nur noch kurz zur Info:

mit Deiner Code-Zeile:

Code
myInDesign.select a.itemByRange(3,5).item(1) 


wählst Du zwar zunächst die Buchstaben 3 bis 5 des ausgewählten Absatzes aus, aber durch das anfügen von item(1) wählst Du von den ausgewählten Zeichen 3 bis 5 den ersten aus. Wenn Du das item(1) weglässt, sollte es funktionieren.

zaphodbeeblebroxx


als Antwort auf: [#282181]

Mehrere Buchstaben (Character) per Script markieren

flingeflung
Beiträge gesamt: 40

19. Mär 2007, 11:50
Beitrag # 6 von 12
Beitrag ID: #282522
Bewertung:
(4647 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin,

das mit dem item(1) war nur als Beispiel gedacht, um zu zeigen, dass nach itemByRange noch weitere Parameter erwartet werden. Heißt: es funktioniert auch nicht nach Weglassen. Ich habe schon alle möglichen Notationen probiert, aber die richtige war anscheinend noch nicht dabei *seufz*.

Trotzdem danke!
Ralf


als Antwort auf: [#282474]

Mehrere Buchstaben (Character) per Script markieren

zaphodbeeblebroxx
Beiträge gesamt: 408

19. Mär 2007, 12:29
Beitrag # 7 von 12
Beitrag ID: #282533
Bewertung:
(4636 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

dann muss da wohl ein Fehler in der VB-Scripting-Reference sein, denn da heißt es:

ItemByRange: Returns the Characters within the specified range.

ParameterTypeDescription:

From Variant: The Character or the index or name of the Character at the beginning of the range as Object, Long or String.

To Variant: The Character or the index or name of the Character at the end of the range as Object, Long or String.



Das heißt also, dass nur der Paramater "von" und "bis" übergeben werden muss, von weiteren Parametern ist hier nicht die Rede. Hast Du bei der Notation auch "ItemByRange" großgeschrieben? Ich weiß nicht, wie das bei VB ist, aber JS reagiert auf falsche Groß-/Kleinschreibung mit einer Fehlermeldung!

Was erhälst Du denn für eine Fehlermeldung, wenn Du den folgenden Code verwendest?



Code
set a=thispara.characters.ItemByRange(n, m).select(); 


zaphodbeeblebroxx


als Antwort auf: [#282522]

Mehrere Buchstaben (Character) per Script markieren

flingeflung
Beiträge gesamt: 40

19. Mär 2007, 13:39
Beitrag # 8 von 12
Beitrag ID: #282560
Bewertung:
(4625 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,
dein Codebeispiel ist eine Methode, und Set ist die Zuweisung einer Objektvariablen, es kann so also gar nicht funktionieren. Die Groß- und Kleinschreibung ist auch hinfällig, da ich VB-Skripte in der Excel-VB-Entwicklungsumgebung teste. Die erlaubt zum einen sehr gutes Debugging und wandelt zum anderen die Schreibweise automatisch in die entsprechende der Objektbibliothek um.

Der Fehler für
Code
myInDesign.ActiveWindow.Select thispara.characters.itemByRange(1,2) 

lautet
"Laufzeitfehler '30477':
Ungültiger Wert für Parameter "SelectableItems" von Ereignis "Select". Objekt, Array of Objects, idNothingEnum enumerator or idSslectAll enumerator erwartet, aber (Character,Character) erhalten"

Anscheinend erwartet der Interpreter also ein Object anstelle von (1,2), welches meine "Range" sein sollte, ich möchte also in dem Beispiel Buchstabe 1 und 2 markieren. Die Frage ist, wie kann ich diese Range in ein Objekt umwandeln, so dass der Interpreter es frisst?

achselzuckende Grüße
Ralf


als Antwort auf: [#282533]

Mehrere Buchstaben (Character) per Script markieren

Martin Fischer
  
Beiträge gesamt: 12783

19. Mär 2007, 14:17
Beitrag # 9 von 12
Beitrag ID: #282570
Bewertung:
(4617 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mal ein Schuß ins Blaue ... vielleicht könnte der Code auch in etwa so lauten:
Code
 myInDesign.ActiveWindow.Select thispara.Texts.itemByRange(Characters.item(1), Characters.item(2)) 


Ich vermute, VBA braucht das Objekt (die Zeichen von ... bis) in der Klammer von itemByRange().


als Antwort auf: [#282560]
(Dieser Beitrag wurde von Martin Fischer am 19. Mär 2007, 14:18 geändert)

Mehrere Buchstaben (Character) per Script markieren

Martin Fischer
  
Beiträge gesamt: 12783

19. Mär 2007, 15:08
Beitrag # 10 von 12
Beitrag ID: #282579
Bewertung:
(4603 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
In dem Code oben ist noch ein Fehler.
Characters(2) sind noch kein Objekt (Characters von was).

Es muß statt dessen thispara.Characters(2) heißen.

Folgendes Skript konnte ich gerade erfolgreich testen:
Code
Set myIndesign = CreateObject("InDesign.Application.CS2") 
Set thispara = myIndesign.Documents.item(1).Stories.item(1).Paragraphs.item(2)
myInDesign.ActiveWindow.Select thispara.Texts.itemByRange(thispara.Characters(3), thispara.Characters(5))



als Antwort auf: [#282570]

Mehrere Buchstaben (Character) per Script markieren

flingeflung
Beiträge gesamt: 40

19. Mär 2007, 15:36
Beitrag # 11 von 12
Beitrag ID: #282587
Bewertung:
(4594 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Martin, du bist wie immer ein Genie ;-)

Ich finde es zwar etwas unlogisch, dass man als Range zwei Objekte statt zweier Indizes angeben muss, aber ... Hauptsache, es funzt jetzt endlich, und das tut es. Vielen Dank!

Viele Grüße
Ralf


als Antwort auf: [#282579]

Mehrere Buchstaben (Character) per Script markieren

Martin Fischer
  
Beiträge gesamt: 12783

19. Mär 2007, 16:01
Beitrag # 12 von 12
Beitrag ID: #282596
Bewertung:
(4584 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> Ich finde es zwar etwas unlogisch, dass man als Range zwei Objekte
> statt zweier Indizes angeben muss, aber

Ja, das ist für einen alten JavaScripter eine harte Nuß.
Da heißt es, kräftig zubeißen. ;-)

Schön, daß es funktioniert.


als Antwort auf: [#282587]
X