| |
| KISTERS 3DViewStation: Effektiver Know-how-Schutz von sensiblen Produktdaten, eine Pressemitteilung
|
Autor
|
Thema: Text in String an Position X einfügen/entfernen (1067 / mal gelesen)
|
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3425 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 26. Jan. 2021 08:01 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, hab folgende Aufgabe: Variante1 Code: 123879_Z02578_ZSB Bauteile
Variante2 Code: 123879_K02578_ZSB Bauteile
Aus diesem Strings möchte ich das erste "Z" bzw."K" entfernen. Zusätzlich beim "_ZSB" ein "-_" hinzufügen. String sollte dann so aussehen Code: 123879_02578_-_ZSB Bauteile
Die Zeichenlänge der Zahlenfolge ist immer gleich.Der hintere Teil variiert. Habe mich mit der Left, Right und Mid Funktion befasst komme da aber nicht richtig klar mit. Hat jemand ein paar Codeschnipsel für mich? Besten Dank ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! [Diese Nachricht wurde von moppesle am 26. Jan. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Trilemma Mitglied staatl. gepr. Techniker
Beiträge: 257 Registriert: 20.08.2010 Catia V5 R19 SP8 Windows7 64bit 12GB 2,93GHz Dell Precision T3500
|
erstellt am: 26. Jan. 2021 08:59 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Moin Uwe, vielleicht hilft das hier: Code: Dim txt As String = "0000000000000" Dim cc() As Char = txt.ToArray cc(4) = "1" 'c Dim txt2 As String = cc MessageBox.Show(txt2)
die fünfte 0 wird mit 1 überschrieben. Gruß Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3425 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 26. Jan. 2021 10:54 <-- editieren / zitieren --> Unities abgeben:
Hallo Peter, Bekomme Fehler bei der Zuweisung in den Array. "Invalid Identifier" bei Code: cc = txt.ToArray
Ich programmiere in VBA und das Makro soll später in CatScript laufen. Variablen werden richtig an die Funktion übergeben strWert = 123879_Z02578_ZSB Bauteile Char =Z Pos =7 Code: Function ReplaceCharakter(strWert, Char, Pos) 'Zeichen an einer bestimmten Position ersetzen Dim txt As String Dim cc() 'As Char Dim txt2 As Stringtxt = strWert txt = strWert cc = txt.ToArray cc(Pos) = Char 'c txt2 = cc MessageBox.Show (txt2) 'Dim txt As String = "0000000000000" 'Dim cc() As Char = txt.ToArray 'cc(4) = "1" 'c 'Dim txt2 As String = cc 'MessageBox.Show (txt2) End Function
Hast du ein Tip für mich. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Trilemma Mitglied staatl. gepr. Techniker
Beiträge: 257 Registriert: 20.08.2010 Catia V5 R19 SP8 Windows7 64bit 12GB 2,93GHz Dell Precision T3500
|
erstellt am: 26. Jan. 2021 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Hallo Uwe, ich schreibe meine Makros hauptsächlich mit vb.net und dort läuft es. ein anderer Ansatz wäre replace:
Code:
Sub CATMain()Dim alt As String Dim neu As String alt = "123879_K02578_ZSB Bauteile" neu = Replace(alt, "_ZSB", "_-_ZSB") MsgBox neu End Sub Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lionel Hutz Mitglied
Beiträge: 451 Registriert: 26.03.2014 CATIA V5 R26
|
erstellt am: 26. Jan. 2021 11:28 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Weniger flexibel, aber funktioniert: Code: 'CATScript Option ExplicitSub CATMain() Dim strWert As STring Dim NewStrWert As STring strWert = "123879_Z02578_ZSB Bauteile" NewStrWert = left(strWert,7) & mid(strWert,9,6) & "-_" & mid( strWert,15,100) InputBox strWert & Chr(10) & "123879_02578_-_ZSB Bauteile" & Chr(10) & NewStrWert,,NewStrWert End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3425 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 26. Jan. 2021 11:33 <-- editieren / zitieren --> Unities abgeben:
Hallo Peter, Zitat: ich schreibe meine Makros hauptsächlich mit vb.net und dort läuft es.
OK das erklärt einiges. Mit Replace kann ich in meinem Fall leider nicht arbeiten, da die erste Zeichenfolge "_Z" für das erste "Z" dann auch im "_ZSB" gefunden würde. Habe es jetzt mit der Left,Right Funktion gelöst. Für die Suche nach dem ersten "Z" Zitat: Function ReplaceCharakter(strWert, Char,) 'Zeichen an einer bestimmten Position ersetzen Dim sText As String Dim CountChar 'Dim txt2 As StringsText = strWert CountChar = Len(strWert) sText = Left(sText,7) & "" & Right(sText, (CountChar - 8)) MsgBox strWert End Function
Für Kritik und Anregungen oder Alternativen bin ich offen. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3425 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 26. Jan. 2021 11:37 <-- editieren / zitieren --> Unities abgeben:
|
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 26. Jan. 2021 17:46 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Servus Uwe Nur als Ergänzung (löst dein Beispiel nicht komplett): Bei Replace kann man auch angeben wie oft der Suchstring ersetzt werden soll. Code: Sub CATMain()Dim sNeu as String Dim sAlt as String sAlt = "123879_Z02578_ZSB Bauteile" sNeu = Replace(sAlt, "Z", "",1,1) sNeu = Replace(sNeu, "_ZSB", "_-_ZSB") MsgBox sNeu End Sub
Alternativ würde noch gehen: Sting mit Split in Array aufsplitten, Teilstings modifizieren, mit Join wieder den gesamt Sting zusammensetzen. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3425 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 27. Jan. 2021 10:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Bernd, Danke für deinen Code. Ich habe noch einen andere Frage. Ich möchte einen Stringvariable auf Inhalt abfragen. Das funktioniert mit:
Code: If strPBenennung.Value = "" Then
Ist nun ein oder mehr Leerzeichen vorhanden funzt das natürlich nicht mehr. Mein Veruch mit
Code: If strPBenennung.Value Is Nothing Then
läuft in einen Fehler."Object required" Hab ich da etwas übersehen? ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Jan. 2021 10:52 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Servus Du könntest mit Trim die Leerzeichen entfernen: Code: Sub CATMain() Dim MyString as String MyString = " " if Trim(MyString) = "" then MsgBox "String enthält nur Leerzeichen oder ist leer" end ifEnd Sub
Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3425 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 27. Jan. 2021 11:07 <-- editieren / zitieren --> Unities abgeben:
Hi Bernd, Warum funktioniert Is Nothing in diesem Fall nicht. Mit Trim kann ich den String nicht von den Leerzeilen befreien, da manchmal eine Konstruktionstabelle damit vernüpft ist. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Jan. 2021 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
Servus Was hast du denn vor? Du könntest Trim zB nur zum Auswerten nutzen, aber den Inhalt des (Orginal)Stings nicht verändern. Gruß Bernd ------------------ Warum einfach, wenn es auch kompliziert geht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
moppesle Ehrenmitglied V.I.P. h.c. Konstrukteur
Beiträge: 3425 Registriert: 28.05.2009 CATIA V5 R19 SP9 WIN 7 64bit
|
erstellt am: 27. Jan. 2021 11:17 <-- editieren / zitieren --> Unities abgeben:
Ich muss den Wert eines Parameter auf Inhalt Prüfen um diesen bei bei vorhandensein weiterverarbeiten. Wenn nun 1 oder mehr Leerzeichen vorhanden sind soll nichts gemacht werden. ------------------ Gruß Uwe Auch Catia ist nur ein Mensch! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bgrittmann Moderator Konstrukteur
Beiträge: 12005 Registriert: 30.11.2006 CATIA V5R19
|
erstellt am: 27. Jan. 2021 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für moppesle
|