Antworten auf deine Fragen:
Neues Thema erstellen

Indesign: Script? Textboxinhalt zufällig mischen

F

freddeh

Guest

Hi Leute, ich hoffe ich hab die richtige Kategorie erwischt.

Folgendes Problem: Ich habe eine Exceltabelle mit jeweils 4 Spalten Text, der eingefügt werden soll. (Format in jeder der Spalten: hund - katze - maus - elefant - tiger). Diese sind in Spalten aufgeteilt, weil sie unterschiedlich formatiert werden sollen. Nun möchte ich aber, wenn ich diese per Datenzusammenführung importiert habe, dass sie anschließend, nach ihrer Formatierung, wieder durcheinandergewirbelt werden, sodass nachher es nachher nicht so aussieht:
<<InhaltSpalte1>><<InhaltSpalte2>><<InhaltSpalte3>><<InhaltSpalte4>>,
sondern z.B. so:

hund - maus - katze - elefant - tiger - affe - ratte

Meine Frage: Wie realisier ich das? Soweit ich weiss, kann ich ja in Excel keine Formatierung vorgeben, oder? Also muss das ja irgendwie mit Indesign nach der Formatierung zufällig durcheinandergewirbelt werden...

Danke für eure Ideen/Lösungen!
 

Design & Layout

F

freddeh

Guest

AW: Indesign: Script? Textboxinhalt zufällig mischen

Nachdem ich nun die ganze Zeit nach einer Lösung gegoogled habe, bin ich darauf gestoßen, in Indesign mit Hilfe von Javascript zu scripten, kann das zufällig jemand?

Ich hab jetzt mal mit schnell selbstbeigebrachten Kenntnissen und mit Hilfe von Vorlagen das hier erstellt:

Code:
function randomize() { 

	if (app.documents.length == 0 || app.selection.length == 0) {
 		alert("Please select an object"); return false;
  	}
	var words = new Array;

	words = app.selection.split(" - ");
	words = words.shuffle();
	app.selection = words.join(" - ") ;
}

function arrayShuffle(){
  var tmp, rand;
  for(var i =0; i < this.length; i++){
    rand = Math.floor(Math.random() * this.length);
    tmp = this[i]; 
    this[i] = this[rand]; 
    this[rand] =tmp;
  }
}

Das wird wohl kaum funktionsfähig sein, aber irgendwie so könnte das doch klappen oder? Wie setz ich sowas eigentlich in indesign dann ein?
 
F

freddeh

Guest

AW: Indesign: Script? Textboxinhalt zufällig mischen

Code:
function arrayShuffle(){
  var tmp, rand;
  for(var i =0; i < this.length; i++){
    rand = Math.floor(Math.random() * this.length);
    tmp = this[i]; 
    this[i] = this[rand]; 
    this[rand] =tmp;
  }
return this.join(" - ")
}
Array.prototype.shuffle = arrayShuffle;

randomize();
function randomize() { 

	if (app.documents.length == 0 || app.selection.length == 0) {
 		alert("Please select an object"); return false;
  	}
	else if(app.selection[0].constructor.name == "TextFrame"){
		var words = new Array;		
		
		words = app.selection[0].contents;

		words = words.split(" - ");
		words = words.shuffle(); 
		app.selection[0].contents = words;
	}
	else {
		alert("Please select an textframe"); return false;
	}
}

So, dass funktioniert schon mal, jetzt brauch ich nur noch etwas um die Formatierung mit zu verschieben? Die bleibt nämlich immer am selben "Fleck"
 
AW: Indesign: Script? Textboxinhalt zufällig mischen

Keine Antworten deuten auf zwei Sachen hin:
1. es gibt hier kaum jemanden, der ID-scripten kann
2. dein eigentliches Problem wird aufgrund deiner Fragestellung nicht wirklich verstanden

Poste bitte mehrere Screenshots (ich bin der Meinung, dass es nicht wirklich eines Scriptes bedarf, aber ich habe dein Problem noch nicht wirklich erkannt!):
- einmal die Exceltabelle (unbedingt mit 1.Zeile!)
- einmal die im Textfeld zugewiesenen Datenfeldplatzhalter in ID mit sichtbarer Datenzusammenführungspalette
- einmal das erreichte Ergebnis der DZ in ID
- und einmal das gewünschte Ergebnis in ID (eventuell "schnell zusammenbasteln")
 
F

freddeh

Guest

AW: Indesign: Script? Textboxinhalt zufällig mischen

Hier ne Excel-Datei als Sample:



Ziel ist es, diese Felder in eine Textbox zu importieren und den Platzhaltern jew. verschiedene Schriftgrößen zu geben, je nach Relevanz --> "Tag Cloud".

Da nun aber diese sortiert sind, damit man ihnen eine Formatierung zuordnen kann brauche ich nun ein Indesign-Script was die Begriffe und deren zugehörige Formatierung mischt, damit man das typische Bild einer Tag Cloud erhält.

Mein Problem ist jetzt nurnoch, dass ich nicht weiss wie ich zunächst auf Textgrößen einzelner Worte komme, diese speicher um diese dann anschließend den Worten nach der neusortierung wieder zuzuordne...
 
AW: Indesign: Script? Textboxinhalt zufällig mischen

Jetzt ist erstmal Film-Abend und bitte noch die restlichen drei Screenshots (vielleicht mit positiven Adjektiven?).
 
F

freddeh

Guest

AW: Indesign: Script? Textboxinhalt zufällig mischen

Der Rest ist noch nicht realisiert...

Wichtig ist doch nur: Die Textbox enthält z.B. die Wörter: "schlau - doof - blöd - nett - unscheinbar". "schlau" hat Schriftgröße 14, "doof" Schriftgröße 10, "nett" Schriftgröße 7, "blöd" Schriftgröße 7.

Wie bekomme ich diese Begriffe neu geordnet, undzwar mit deren Formatierung. Nach meinem Kenntnisstand ist das nur mit Scripten möglich...
 
F

freddeh

Guest

AW: Indesign: Script? Textboxinhalt zufällig mischen

Hat sich erledigt. Wens interessiert:

Code:
function GetRandom( min, max ) {
	if( min > max ) {  return( -1 );    }
	if( min == max ) {
		return( min );
      }
      return( min + parseInt( Math.random() * ( max-min+1 ) ) );
} 

function randomize() {
	if (app.documents.length == 0 || app.selection.length == 0) { 
 		alert("Please select an object"); return false; 
  	} 
	if (app.selection[0].constructor.name == "TextFrame") {
		if(app.selection[0].label == "TagCloudDone") {
			alert("Tag Cloud already done!"); return false;
		}
		else {
		
		var myWords = new Array;
		var i,j, z,ref;
		 
		myText = app.selection[0];
		myWords = myText.contents; 
		myWords = myWords.split(" ");
		
			for(var i = 0; i < myWords.length-1;i++) {
				z = LocationOptions.before;
				y = GetRandom(0,myWords.length-1);
				ref = myText.texts[0].words.item(y);
				var moveIt = myText.parentStory.characters.itemByRange(myText.parentStory.words.item(i).characters.firstItem().index,myText.parentStory.words.item(i).characters.lastItem().index +1);
				while((i == y)  || (i == y-1)) { var y = GetRandom(0,myWords.length-1);  var ref = myText.texts[0].words.item(y); }
				moveIt.move(z,ref);
			} 
			for(var l = 0; l < ((2 * myWords.length)-2);l++) {
				myText.texts[0].words.item(l).contents = myText.texts[0].words.item(l).contents + " -";
				myText.texts[0].words.item(l+1).pointSize = 10;
				l++;
			} 
		app.selection[0].label = "TagCloudDone";
		}
		}
	else { 
		alert("Please select an textframe"); return false; 
	} 
}

randomize();


Input:
hund katze maus tiger
Output:
katze - hund - maus - tiger
 
AW: Indesign: Script? Textboxinhalt zufällig mischen

Ich glaube zwar nicht, dass hier sonst noch jemand etwas mit diesem Script anfangen kann - es ist aber immer schön, wenn jemand die Ergebnisse seiner Anfrage dann auch vorstellt.
;)


Hast du jetzt deine Spalten in Excel komplett ohne Bindestrich als Worttrennzeichen?
Denn dein Script ist jetzt ja so aufgebaut, dass es automatisch aus (mit Leerzeichen getrennten) Wörtern, diese in einer anderen (zufälligen) Reihenfolge neu setzt und jeweils eine Leerzeichen/Bindestrich-Kombination dazwischen einfügt. Also anders, als du ursprünglich geplant hattest.

Hier eine etwas bereinigte Version:
Code:
main();
function main()
{
 if (app.documents.length != 0) {
  if (app.selection.length > 0)  {
   switch(app.selection[0].constructor.name)   {
    case "TextFrame":
    randomize();
    break;
    default:
    alert("Bitte einen Textrahmen auswählen!");
    break;
    }
   }
  else  {
   alert("Es ist nichts markiert.");
   }
  }
 else {
  alert("Es ist kein Dokument geöffnet!");
  }
}
function randomize()
{
 if (app.selection[0].label == "TagCloud")  {
  alert("\"Tag Cloud\" wurde bereits angewendet!");
  return false;
}
 var myWords = new Array;   
 var myText = app.selection[0];
 var myWords = myText.contents.split(" ");
 
 for(var i = 0; i < myWords.length-1;i++)  {
  var z = LocationOptions.before;
  var y = GetRandom(0,myWords.length-1);
  var ref = myText.texts[0].words.item(y);
  var moveIt = myText.parentStory.characters.itemByRange(myText.parentStory.words.item(i).characters.firstItem().index,myText.parentStory.words.item(i).characters.lastItem().index +1);
  while((i == y)  || (i == y-1))  {
   var y = GetRandom(0,myWords.length-1);  var ref = myText.texts[0].words.item(y);
   }
  moveIt.move(z,ref);
  }
 for(var l = 0; l < ((2 * myWords.length)-2);l++)
 {   
  myText.texts[0].words.item(l).contents = myText.texts[0].words.item(l).contents + " -";
  myText.texts[0].words.item(l+1).pointSize = 10;
  myText.texts[0].words.item(l+1).fillColor = "Black";
  l++;
  }
 app.selection[0].label = "TagCloud";
 }
function GetRandom( min, max ) {
 if( min > max )  {
  return( -1 );
  }
 if( min == max )  {
  return( min );
      }
   return( min + parseInt( Math.random() * ( max-min+1 ) ) );
}

Die "Fehlerabfragen" sind jetzt in einer logischen Reihenfolge und die Funktionsaufrufe ebenso.
Die kleine zusätzliche Zeile #47 bewirkt, dass der eingefügte Bindestrich jeweils die Farbe "Schwarz" behält - und nicht wie in deiner Version die Farbe des voranstehenden Wortes.

Viel Spaß noch beim Scripten
;)
 
F

freddeh

Guest

AW: Indesign: Script? Textboxinhalt zufällig mischen

Mhh habe nun ein neues Problem. Diesmal habe ich eine Quelle mit mehreren Begriffen die so angeordnet sind:

ich bin eine kuh, ich bin ein elefant, du bist schön, cool, oink

Also mal einzelne, mal mehrere Begriffe, alle getrennt durch ein Komma.

Die möchte ich nun ebenfalls, so wie sie sind, wie in dem Script oben, mit sammt der Formatierung, die bereits besteht, zufällig anordnen, aber so, dass die einzelnen Aussagen bestehen bleiben, sich nur ihre Reihenfolge ändert. Jemand eine Idee?

Danke für die Hilfe..
 
AW: Indesign: Script? Textboxinhalt zufällig mischen

5 Fragen:

1) Wäre es ok, wenn du das mit dem gleichen Script (ohne jegliche Änderung) erledigen könntest?
2) Gibt es eine durchgängige Trennung mittels Kommata + nachfolgendem Leerzeichen in jedem der in Frage kommenden Absätze?
3) Hast du die Worte und Wortgruppen bereits mit Zeichen- und Absatzformat belegt?
4) Sprichst du "GREP" (erweitertes Suchen & Ersetzen)
5) Kommt in deinem Text ein Dollar- oder ein Paragraphenzeichen vor?

:uhm:
 
F

freddeh

Guest

AW: Indesign: Script? Textboxinhalt zufällig mischen

1) Ehm versteh ich nicht ganz: Das alte Script oben würfelt ja die Reihenfolge der "Aussagen" ebenfalls, ich will ja nur die Reihenfolge der Aussagen zufällig ändern

2) Ja!

3) Jap

4) Leider nein

5) Nein

Danke für die schnelle Antwort
 
AW: Indesign: Script? Textboxinhalt zufällig mischen

1) Ehm versteh ich nicht ganz: Das alte Script oben würfelt ja die Reihenfolge der "Aussagen" ebenfalls, ich will ja nur die Reihenfolge der Aussagen zufällig ändern

2) Ja!

3) Jap

4) Leider nein

5) Nein

Danke für die schnelle Antwort


Zuerst:
Arbeite immer mit einer Kopie deines Dokumentes, wenn du unbekannte Scripte oder kaum getestete Grep-Abfragen benutzt.

zu 1) Ganz einfach. Du braucht drei anstatt zwei GREP-Abfagen, wenn du das Script ohne Änderung anwendest. Erklärung folgt.

zu 2) Gut

zu 3) Das den Begriffen zugeordnete Absatzformat wird hoffentlich ausschliesslich für die Begriffe verwendet (und sonst nirgendwo anders im Dokument)? Sonst müsstest du Textrahmen für Textrahmen bearbeiten, oder nachträglich den Absätzen mit den Begriffen ein separates Absatzformat zuweisen. Allerdings funktioniert dein Script IMHO ohnehin nur für einen aktiven Textrahmen, dementsprechend ist ein dokumentenweites Arbeiten in diesem Fall nicht ganz so wichtig.

Dann kannst du mit der unten folgenden GREP-Suchen&Ersetzen-Funktion dein gesamtes Dokument auf einmal durchsuchen und ersetzen lassen.

4) ich poste den erforderlichen GREP (siehe Screenshot #2)

5) Gut, denn ich brauche ein Zeichen, das eindeutig identifizierbar ist. Nachfolgend verwende ich das Paragraphen-Zeichen um die Leerzeichen in den Wortgruppen zu ersetzen und damit quasi aus der Wortgruppe ein einzelnes Wort zu erstellen. Dann kann das Script verwendet werden. Und anschliessend ersetze ich die Paragraphen wieder durch Leerzeichen.

Fangen wir an:

Textfeld mit einem den Begriffen zugeordetem AF:




Ersetzen der Leerzeichen in den Wortgruppen durch folgende Einstellung:




Nur die Wortgruppen wurden "vereinigt":




Nachdem das Script angewendet wurde (Ich habe allerdings das Script geändert, daher gibt es keine Bindestriche!):




Jetzt die Paragraphen-Zeichen wieder entfernen:





Fertig!



;)

In diesem Beispiel habe ich im Script die Zeilen - die den Bindestrich und das zusätzliche Leerzeichen einfügen - einfach auskommentiert. Wenn du dein Script nicht änderst, dann funktioniert trotzdem die gleiche Vorgehensweise. Du musst lediglich am Schluss noch einen S&E-Durchgang starten, der die (dann überflüssigerweise eingefügten) Bindestrich/Leerzeichenkombinationen wieder entfernt.
 
F

freddeh

Guest

AW: Indesign: Script? Textboxinhalt zufällig mischen

Danke für die ausführliche Hilfe! Hat geklappt.
 
AW: Indesign: Script? Textboxinhalt zufällig mischen

Könntest du bitte einmal eine unverfängliche Beispielseite des fertigen Dokumentes als Screenshot oder PDF posten? (reine Neugier ;))
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.640
Beiträge
1.538.506
Mitglieder
67.559
Neuestes Mitglied
mic4mac
Oben