[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Text wird bei Ersetzung um zwei Zeichen gekürzt

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

Text wird bei Ersetzung um zwei Zeichen gekürzt

WernerPerplies
Beiträge gesamt: 2700

19. Jul 2011, 16:31
Beitrag # 1 von 22
Bewertung:
(4673 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,

ich stehe mal wieder völlig auf dem Schlauch und vermutlich gibt es eine ganz einfache Erklärung:
Code
var pointerC = "001"; 
var regExp = new RegExp("::" + "\\w*" + "::" + "|" + "::" + "#\\w*" + "::", "g");
var document = app.documents.add();
app.documentPresets.item.firstItem;
var page = document.pages.item(0);
var textframe = page.textFrames.add();
textframe.geometricBounds = [100,100,200,200];
textframe.contents ="::001D:: ::#DC:: ::#WX:: ::#t1::";
var p= document.stories[0].paragraphs[0];
var matches = p.contents.match(regExp);
// now loop over all matches
for (var j = 0; j<matches.length;j++)
{
if (pointerC.length>0)
{
var s = matches[j];
matches[j] = matches[j].replace("#",pointerC);
p.contents = p.contents.replace(s,matches[j]); // <------
}
alert(p.contents);
}

Wenn diese Schleife durchlaufen wird und die Ersetzung ausgeführt wird, verschwinden mit jeder Ersetzung zwei Zeichen am Absatzanfang.

Warum?
X

Text wird bei Ersetzung um zwei Zeichen gekürzt

Martin Fischer
  
Beiträge gesamt: 12685

19. Jul 2011, 17:19
Beitrag # 2 von 22
Beitrag ID: #476319
Bewertung:
(4655 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ohne dass ich jetzt ins Detail des Skripts gehe, empfehle ich dort, wo sich während der Ausführung des Skripts die Zahl der Zeichen im bearbeiteten Textobjekt ändert, die entsprechende Schleife rückwärts auszuführen.

Denn mit der Veränderung der Zeichenzahl ist es möglich, dass sich die Indices der Treffer verändern.

Verbessert die Umkehrung des Schleifendurchgangs die Situation?
Code
for (var j = matches.length-1; j >= 0 ;j--) 


Wenn nicht, dann könnte ich gegen später nochmal detaillierter reinschauen.


als Antwort auf: [#476314]
(Dieser Beitrag wurde von Martin Fischer am 19. Jul 2011, 17:20 geändert)

Text wird bei Ersetzung um zwei Zeichen gekürzt

WernerPerplies
Beiträge gesamt: 2700

19. Jul 2011, 17:37
Beitrag # 3 von 22
Beitrag ID: #476320
Bewertung:
(4639 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

danke für Deinen Beitrag.
rückwärts ist sicherlich immer sinnvoll, wenn Pointer im Spiel sind, aber hier geht es eigentlich immer genau um eine Ersetzung, die nächste Ersetzung findet dann im Ergebnis statt.

Und dann gibt es noch zwei weitere, mir unverständliche Effekte:

1. Die Ersetzung ist im Ergebnis ok, da verschiebt sich nichts.
2. Nach Ablauf des Scripts ist das Ergebnis im Rahmen in meinem Beispiel - aber nicht in meinem Ursprungsprogramm - ok.

p.contents weicht also von der Darstellung im Textrahmen ab.

Zitat Verbessert die Umkehrung des Schleifendurchgangs die Situation?

Nööö;-)


als Antwort auf: [#476319]

Text wird bei Ersetzung um zwei Zeichen gekürzt

WernerPerplies
Beiträge gesamt: 2700

19. Jul 2011, 17:49
Beitrag # 4 von 22
Beitrag ID: #476322
Bewertung:
(4633 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Martin,

und gerade habe ich festgestellt, das das Problem nicht im Replace liegt, denn mit einer selbst geschriebenen Replaceroutine gibt es exakt das gleiche Ergebnis.

Ergänzung: alles mit CS4 getestet.


als Antwort auf: [#476319]

Text wird bei Ersetzung um zwei Zeichen gekürzt

WernerPerplies
Beiträge gesamt: 2700

19. Jul 2011, 18:01
Beitrag # 5 von 22
Beitrag ID: #476323
Bewertung:
(4618 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,

noch zwei Skriptvarianten, könnte es vielleicht doch ein Bug sein?

Code
var pointerC = "001"; 
var regExp = new RegExp("::" + "\\w*" + "::" + "|" + "::" + "#\\w*" + "::", "g");
var document = app.documents.add();
app.documentPresets.item.firstItem;
var page = document.pages.item(0);
var textframe = page.textFrames.add();
textframe.geometricBounds = [100,100,200,200];
textframe.contents ="::001D::&#8195;::#DC::&#8195;::#WX::&#8195;::#t1::";
var p= document.stories[0].paragraphs[0];
var matches = p.contents.match(regExp);
// now loop over all matches
// for (var j = 0; j<matches.length;j++)
for (var j = matches.length-1; j>=0;j--)
{
if (pointerC.length>0)
{
var s = matches[j];
matches[j] = matches[j].replace("#",pointerC);
// p.contents = p.contents.replace(s,matches[j]);
p.contents = replace(p.contents,s,matches[j]);
}
alert(p.contents);
}
alert(p.contents);
function replace(source, search, replacement)
{
var start = source.indexOf(search);
if (start < 0) return source; // not found!
if (start == 0) return replacement + source.substr(search.length);
if (start == source.length-search.length) return source.substr(0,source.length-search.length) + replacement;
return source.substr(0,start)+replacement+source.substr(start+search.length);
}



Code
var regExp = new RegExp("::" + "\\w*" + "::" + "|" + "::" + "#\\w*" + "::", "g"); 
var document = app.documents.add();
app.documentPresets.item.firstItem;
var page = document.pages.item(0);
var textframe = page.textFrames.add();
textframe.geometricBounds = [100,100,200,200];
textframe.contents ="::001D::&#8195;::#DC::&#8195;::#WX::&#8195;::#t1::";
var p= document.stories[0].paragraphs[0];
var matches = p.contents.match(regExp);
// now loop over all matches
// for (var j = 0; j<matches.length;j++)
var pContents = p.contents;
for (var j = matches.length-1; j>=0;j--)
{
if (pointerC.length>0)
{
var s = matches[j];
matches[j] = matches[j].replace("#",pointerC);
// p.contents = p.contents.replace(s,matches[j]);
pContents = replace(pContents,s,matches[j]);
}
alert(pContents);
}
p.contents = pContents;
alert(p.contents);
function replace(source, search, replacement)
{
var start = source.indexOf(search);
if (start < 0) return source; // not found!
if (start == 0) return replacement + source.substr(search.length);
if (start == source.length-search.length) return source.substr(0,source.length-search.length) + replacement;
return source.substr(0,start)+replacement+source.substr(start+search.length);
}



als Antwort auf: [#476319]

Text wird bei Ersetzung um zwei Zeichen gekürzt

Uwe Laubender
Beiträge gesamt: 5252

19. Jul 2011, 18:19
Beitrag # 6 von 22
Beitrag ID: #476326
Bewertung:
(4609 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Werner!
Bennene Deine Funktion function replace(source, search, replacement) mal um.

Z.B. in :

function replaceWerner(source, search, replacement).

MacBook Pro 2.4GHz | OS X 10.5.8 | Adobe CS3/CS4/CS5/CS5.5 Design Premium


als Antwort auf: [#476323]

Text wird bei Ersetzung um zwei Zeichen gekürzt

WernerPerplies
Beiträge gesamt: 2700

19. Jul 2011, 18:26
Beitrag # 7 von 22
Beitrag ID: #476327
Bewertung:
(4601 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

habe ich gemacht, bringt nichts, hätte mich aber auch sehr gewundert.

Ich habe zwischenzeitlich eine weitere Erkenntnis:

p.contents hat den falschen Inhalt,
document.stories[0].paragraphs[0].contents,
den richtigen Inhalt!

Ich kapiere es nicht, beide müssten eine Referenz auf den gleichen Inhalt sein, dass zeigt sich schon alleine dadurch, dass die Ersetzungen in document.stories[0].paragraphs[0].contents enthalten sind, trotzem werden unterschiedliche Inhalte gezeigt!


als Antwort auf: [#476326]

Text wird bei Ersetzung um zwei Zeichen gekürzt

Uwe Laubender
Beiträge gesamt: 5252

19. Jul 2011, 18:34
Beitrag # 8 von 22
Beitrag ID: #476328
Bewertung:
(4588 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Werner!
Dachte die beiden Funktionen
replace() //Zwei Argumente
und
replace() //Drei Argumente
kommen sich da ins Gehege…

Bei mir gibt's jedenfalls zwei unterschiedliche Ergebnisse, wenn Deine selbstgeschriebene Funktion einen eigenen Namen hat.

MacBook Pro 2.4GHz | OS X 10.5.8 | Adobe CS3/CS4/CS5/CS5.5 Design Premium


als Antwort auf: [#476326]

Text wird bei Ersetzung um zwei Zeichen gekürzt

Uwe Laubender
Beiträge gesamt: 5252

19. Jul 2011, 18:37
Beitrag # 9 von 22
Beitrag ID: #476330
Bewertung:
(4586 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, Werner!
Natürlich muß der Funktionsaufruf Deiner eigenen Funktion auch entsprechend lauten:

pContents = replaceWerner(pContents,s,matches[j]);

Ob das Ergebnis dann Deinen Erwartungen entspricht, ist ein anderes Thema…

MacBook Pro 2.4GHz | OS X 10.5.8 | Adobe CS3/CS4/CS5/CS5.5 Design Premium


als Antwort auf: [#476328]

Text wird bei Ersetzung um zwei Zeichen gekürzt

Uwe Laubender
Beiträge gesamt: 5252

19. Jul 2011, 18:49
Beitrag # 10 von 22
Beitrag ID: #476332
Bewertung:
(4577 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Nach erneutem Testen: Sorry, Du hast recht. Das Ergebnis beider Methoden zeigt keinen Unterschied. Hatte mich wahrscheinlich verlesen. Jetzt, da ich die Ausgabe in die JavaScript-Konsole des ESTK geleitet habe, war's mir klar…

Was wäre denn Dein Wunschergebnis bei den Ersetzenvorgängen?

MacBook Pro 2.4GHz | OS X 10.5.8 | Adobe CS3/CS4/CS5/CS5.5 Design Premium


als Antwort auf: [#476330]

Text wird bei Ersetzung um zwei Zeichen gekürzt

WernerPerplies
Beiträge gesamt: 2700

19. Jul 2011, 19:18
Beitrag # 11 von 22
Beitrag ID: #476334
Bewertung:
(4548 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Uwe,

zuerst einmal vielen Dank für Deine Hilfe.

Die Funktion mit replace zu benennen, sollte kein Problem sein, denn das andere replace ist eine Methode des Objekts String und wird so adressiert:
string.replace.

Deshalb benötigt die Methode auch nur zwei Parameter.

Wenn ich das Object String um die Funktionalität meiner Funktion erweitern wollte, müsste ich einen Prototypen definieren, der dann selbstverständlich einen anderen Namen haben müsste.

So, zurück zum Problem:

Im ursprünglichen Testprogramm (Schleife vorwärts) verändert sich der Inhalt von p.contents so:

Code
::001D:: ::#DC:: ::#WX:: ::#t1:: 
001D:: ::001DC:: ::#WX:: ::#t1::
1D:: ::001DC:: ::001WX:: ::#t1::
:: ::001DC:: ::001WX:: ::001t1::


d. h. die Länge des Strings bleibt immer gleich, und damit gehen am Anfang 6 Zeichen verloren.

Das Endergebnis solle so aussehen:
Code
::001D:: ::001DC:: ::001WX:: ::001t1:: 


Wenn Du Dir Folgendes ansiehst:

Inhalt von document.stories[0].paragraphs[0].contents [b]vor Schleifendurchlauf:
Code
::001D:: ::#DC:: ::#WX:: ::#t1:: 


Inhalt von document.stories[0].paragraphs[0].contents [b]nach Schleifendurchlauf:
Code
::001D:: ::001DC:: ::001WX:: ::001t1:: 


dann ist da alles ok.

Wenn Du Dir mein Beispiel mit pContents ansiehst, dann kannst Du sehen, dass die Ersetzungen völlig in Ordnung sind, und die Daten erst beim Umspeichern nach p.contents verloren gehen.

Wenn ich das jetzt alles rekapituliere, muss ich feststellen, dass es sich wohl gar nicht um ein Replace-Problem handelt, sondern um ein Zuweisungsproblem nach p.contents.

Das ist dann wohl ein ganz dicker BUG!

Jetzt stellen sich noch zwei Fragen:

1. Könnt Ihr den Bug reproduzieren?
2. Ich arbeite mit Windows, ist der Bug vielleicht betriebssystemabhängig?

Fragen über Fragen und ein komplett vertaner Tag.


als Antwort auf: [#476332]

Text wird bei Ersetzung um zwei Zeichen gekürzt

WernerPerplies
Beiträge gesamt: 2700

20. Jul 2011, 07:38
Beitrag # 12 von 22
Beitrag ID: #476346
Bewertung:
(4478 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen,

ich hoffe immer noch, dass mir jemand mitteilt, ob und wo sich der Fehler reproduzieren lässt.

neueste Erkenntnis:
Code
// paragraphs -> paragraph collection verschiedener parents 
p = paragraphs[0];
alert(p.contents); // -> "0123456789"
p.contents = "012345678901234";
alert(p.contents); // -> "5678901234"
alert(paragraphs[0].contents); // -> "012345678901234";
alert(p.parent.paragraphs[0].contents); // -> "012345678901234";



als Antwort auf: [#476334]

Text wird bei Ersetzung um zwei Zeichen gekürzt

Hans Haesler
  
Beiträge gesamt: 5818

20. Jul 2011, 16:24
Beitrag # 13 von 22
Beitrag ID: #476391
Bewertung:
(4422 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

ich kann Dein Problem unter Mac OS X nachvollziehen. Auch die frühreren Beispiele ergeben hier dasselbe Resultat.

Aber: Wenn 'p' nach einer Änderung des Inhalts des Textrahmens "aufgefrischt" wird, dann ist das Ergebnis wie erwartet.

Mein Dokument hat nur einen Textrahmen, welcher nur die Textkette "0123456789" enthält. Statt "01234" wird "abcde" angefügt.

Code
var paragraphs = app.documents[0].textFrames[0].parentStory.paragraphs; 
p = paragraphs[0];
alert(p.contents); // -> "0123456789"
p.contents = "0123456789abcde";
p = paragraphs[0]; // <- "auffrischen"
alert(p.contents); // -> "0123456789abcde"

Gruss, Hans


als Antwort auf: [#476346]
(Dieser Beitrag wurde von Hans Haesler am 20. Jul 2011, 16:36 geändert)

Text wird bei Ersetzung um zwei Zeichen gekürzt

WernerPerplies
Beiträge gesamt: 2700

20. Jul 2011, 17:13
Beitrag # 14 von 22
Beitrag ID: #476399
Bewertung:
(4412 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

danke für die Bestätigung.

Zitat Aber: Wenn 'p' nach einer Änderung des Inhalts des Textrahmens "aufgefrischt" wird, dann ist das Ergebnis wie erwartet.


Ja, dass hatte ich zwischenzeitlich auch entdeckt.

Leider muss ich jetzt einen komplett anderen Weg gehen, weil bei einem Absatz, der vor meinem gespeicherten Absatz eingefügt wird, sich der Inhalt von p ändert.

Ich habe noch etwas vergessen:

Ich finde, das ist ein ganz übler Fehler, denn wenn in einer Schleife den Inhalt ohne Refresh (davon weiß der normale Anwender ja nichts) verändert. wird der Text natürlich auch im Dokument verändert.


als Antwort auf: [#476391]
(Dieser Beitrag wurde von WernerPerplies am 20. Jul 2011, 17:17 geändert)

Text wird bei Ersetzung um zwei Zeichen gekürzt

Martin Fischer
  
Beiträge gesamt: 12685

14. Aug 2011, 20:56
Beitrag # 15 von 22
Beitrag ID: #478166
Bewertung:
(4224 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zu diesem irritierenden Verhalten kann ich aus gegebenem Anlass auch noch ein Beispiel beitragen.

Mit folgendem Skript wird – für's Experiment(!) – ein neues Dokument mit drei versetzten Textrahmen mit jeweils demselben Inhalt angelegt.

Code
var _doc = app.documents.add(); 

// drei versetzte Textrahmen mit demselben Inhlat
var tf_1 = _doc.textFrames.add({geometricBounds : [10,10,100,40], contents:'Absatz 0\rAbsatz 1\rAbsatz 2\rAbsatz 3\rAbsatz 4\rAbsatz 5\rAbsatz 6\rAbsatz 7\rAbsatz 8\rAbsatz 9\r'});
var tf_2 = _doc.textFrames.add({geometricBounds : [10,40,100,80], contents:'Absatz 0\rAbsatz 1\rAbsatz 2\rAbsatz 3\rAbsatz 4\rAbsatz 5\rAbsatz 6\rAbsatz 7\rAbsatz 8\rAbsatz 9\r'});
var tf_3 = _doc.textFrames.add({geometricBounds : [10,80,100,120], contents:'Absatz 0\rAbsatz 1\rAbsatz 2\rAbsatz 3\rAbsatz 4\rAbsatz 5\rAbsatz 6\rAbsatz 7\rAbsatz 8\rAbsatz 9\r'});

// Referenzierung von je drei bestimmten Absätzen
var pa_1 = [tf_1.paragraphs.item(2),tf_1.paragraphs.item(5),tf_1.paragraphs.item(7)];
var pa_2 = [tf_2.paragraphs.item(2),tf_2.paragraphs.item(5),tf_2.paragraphs.item(7)];
var pa_3 = [tf_3.paragraphs.item(2),tf_3.paragraphs.item(5),tf_3.paragraphs.item(7)];


// =======================================================
// Versuchsoperationen
// =======================================================

// Textrahmen 1 – nur ! voranstellen
for (var i = pa_1.length - 1; i >= 0 ; i--)
{
pa_1[i].insertionPoints.firstItem().contents = '!';
}

// Textrahmen 2 – nur Absatz löschen
for (var i = pa_2.length - 1; i >= 0 ; i--)
{
pa_2[i].remove();
}

// Textrahmen 3 – ! voranstellen und danach Absatz löschen – Schleife rückwärts
for (var i = pa_3.length - 1; i >= 0 ; i--)
{
pa_3[i].insertionPoints.firstItem().contents = '!';
pa_3[i].remove();
}

Die Textrahmen beinhalten direkt nach dem Anlegen jeweils die folgende Liste
Code
Absatz 0 
Absatz 1
Absatz 2
Absatz 3
Absatz 4
Absatz 5
Absatz 6
Absatz 7
Absatz 8
Absatz 9


Die Absätze in den einzelnen Textrahmen werden in analoger Weise in den Arrays pa_1, pa_2 und pa_3 referenziert.

Nun werden auf die Absätze in den drei Textrahmen der Reihe nach unterschiedliche Operationen angewandt.

Den Absätzen 3, 6, 8 ('Absatz 2', 'Absatz 5' und 'Absatz 7') des ersten Textrahmens wird in einer Schleife rückwärts ein Ausrufezeichen ! vorangestellt.
Das Ergebnis entspricht der Erwartung.
Code
Absatz 0 
Absatz 1
!Absatz 2
Absatz 3
Absatz 4
!Absatz 5
Absatz 6
!Absatz 7
Absatz 8
Absatz 9


Die entsprechenden Absätze des zweiten Textrahmens werden in einer Schleife rückwärts gelöscht.
Auch hier entspricht das Ergebnis der Erwartung.
Code
Absatz 0 
Absatz 1
Absatz 3
Absatz 4
Absatz 6
Absatz 8
Absatz 9


Auf die entsprechenden Absätze des dritten Textrahmens werden in einer Schleife rückwärts beide Operationen direkt hintereinander angewandt.
Naiverweise würde man eigentlich dasselbe Ergebnis wie in Textrahmen 2 erwarten. Die Absätze, welchen zunächst ein Ausrufezeichen vorangestellt bekommen, werden im nächsten Schritt sofort gelöscht. Es sollten also keine Ausrufezeichen sichtbar sein.

Sind sie doch.
Aber nicht bei den Absätzen, wie im ersten Textrahmen, sondern – auf den ersten Blick – um einen Absatz weiter nach unten versetzt.
Code
Absatz 0 
Absatz 1
!Absatz 3
Absatz 4
!Absatz 6
!Absatz 8
Absatz 9


Wie ist das möglich?
Das Löschen, das nach der Zuweisung des Ausrufezeichens erfolgt, soll korrekt ausgeführt sein (das Ergebnis in Textrahmen 3 entpricht in dieser Hinsicht dem Ergebnis in Textrahmen 2) und beim Einfügen des Ausrufezeichens soll ein Fehler unterlaufen sein?

Wenn man in Zeitlupe (d.h. mit einer Unterbrechung während des zweiten Schleifendurchgangs direkt nach Einfügen des Ausrufezeichens) zuschaut, dann erkennt man, dass das Ausrufezeichen durchaus an der richtigen Stelle eingefügt wird.

Der Fehler kommt aber nun dadurch zustande, dass nicht der gesamte Absatz, in welchen das Ausrufezeichen eingefügt worden ist, gelöscht wird, sondern nur der Teil des Absatzes, der vor dem Einfügen des Ausrufezeichens existierte, also ab 'Absatz' unter Ignorieren des frisch hinzugekommenen Ausrufezeichens.

Zu diesem wird dann der Anfang des nächsten Absatzes 'hochgezogen', so dass es am Ende so wirkt, als ob es dem falschen Absatz zugewiesen worden sei.
Die Absätze, wären sie abwechselnd rot und blau eingefärbt, sähen also am Ende so aus:
Code
Absatz 0 
Absatz 1
!Absatz 3
Absatz 4
!Absatz 6
!Absatz 8
Absatz 9




Für meinen konkreten Fall (wo es um Verschiebungen von verankerten Objekten, die durch die Verschiebung die interne Ordnung der Absätze durcheinanderbringen) habe ich zwar einen spezifischen Workaround entwickeln können.
Eine allgemeine Lösung wäre aber angenehmer. ;-)
Ich würde das Verhalten, das nicht der Erwartung entspricht, auch als Bug bezeichnen.

Es sieht so aus, als ob ein referenzierter Absatz, dessen Inhalt sich während der Skriptausführung verändert, über seine Bestandteile den Überblick verliert und vergisst, wo seine Grenzen sind.

Ist es so, dass das Problem in erster Linie am Anfang eines Absatzes zu finden ist oder ist jemandem in ähnlichen Situationen auch schon untergekommen, dass am Ende etwas fehlt (aus der Referenzierung rausfällt) – je nachdem, ob im 'realen' Absatz etwas hingekommen oder weggenommen wurde?


als Antwort auf: [#476399]
(Dieser Beitrag wurde von Martin Fischer am 14. Aug 2011, 21:01 geändert)
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/