Forum: PC-Programmierung Stringmanipluation C#


von Leon E. (adiagi)


Lesenswert?

Hi,

ich hab ein Programm geschrieben, auf der eine Textbox mit text ist, der 
automatisch hinzugefügt wird.

Diesen sttrng würd ich nun gern manipulieren und dann ausgeben.

Beispiel:

Sring der TextBox:
1
String 1: "General Configuration.00.NodeAddress.Get"
Manipulierter String (sollte so aussehen):
1
 "generalConfiguration.NodeAddress_Get()"


Durch
1
a = a.Replace("General Configuration", "generalConfiguration");
2
a = a.Remove(21, 3);
bekomm ich das "generalConfiguration."

wie kann ich String 1 so manipulieren,dass der Punkt nach 00 bleibt, 
aber der nach NodeAdress als unterstrich ersetzt wird.
Es sei gesagt, dass NodeAdress auch anders heißen kann, das heißt ich 
kann nicht über den index gehen.

Vielen Dank

Gruß

Agit

von Leon E. (adiagi)


Lesenswert?

hi,

habs hinbekommen so gehts!
1
string sOld = ".";
2
            string sNew = "_";
3
            int pos = a.IndexOf(sOld,22);
4
            a = a.Remove(pos, sOld.Length);
5
            a = a.Insert(pos, sNew);



Gruß

Agit

von Leon E. (adiagi)


Lesenswert?

hi,

bin immer noch am String maipulieren und hab jetzt einanderes Problem.

wie bekomme ich aus der folgenden Zeile:
1
General Configuration.00.NodeAddress.Set.NodeAdr=0100

die Zeile hin
1
generalConfiguration.NodeAddress_Set(0x0100)

habe es bis zum "_Set" hinbekommen. Nun mus ich überprüfen, wenn es ein 
"=" gibt, dass der nachkomende Text in einer Klammer geschrieben wird 
und der vorangehende Text bis zum "." wegfällt".

also Aus
".NodeAdr=100" muss "(0x100) werden.


die 0x soll nur angefügt werden, wenn eine Zahl nach dem = folgt.

ansonsten wird nur der Text übernommen, also
aus
1
General Configuration.00.SetDeviceMode.StartResult.DeviceMode=Slave

wird
1
generalConfiguration.SetDeviceMode_StartResult(Slave)

ich hoff es gobt experten in sachen Sringmaipulation.

Gruß

agit

von N. T. (fox13)


Lesenswert?

Hey!

Wenn es sich immer um den selben String handelt würd ichs mit der
Substring - Methode versuchen.

http://msdn.microsoft.com/de-de/library/aka44szs.aspx

Gruß
N.T

von Borislav B. (boris_b)


Lesenswert?

Du solltest dir mal Regex.Split ansehen. Damit kannst du recht 
komfortabel strings nach bestimmten Mustern durchsuchen. Mit der Match 
Methode kannst du dir die Funde dann auch gleich extrahieren lassen.

von Leon E. (adiagi)


Lesenswert?

HI ,

danke für die Antworten.

N. T. schrieb:
> Wenn es sich immer um den selben String

ne es kann auch ein anderer String vorkommen, nur die Struktur ist 
gleich.

@Boris

werde mir Regex anschauen, ich hoffe dass deckt all meine Fälle ab.

Gruß

Agit

von Borislav B. (boris_b)


Lesenswert?

Das tut es bestimmt. Du kannst mit einem Regex so ziemlich alles machen. 
Ist nur leider manchmal nicht ganz einfach, den richtigen zu finden ;-)
Aber es gibt nette Onlinetools zum Testen und Entwerfen von regulären 
Ausdrücken (z.B. 
http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx).

von Sebastian L. (Gast)


Lesenswert?

Hi

hier mal nur so als hilfe

http://txt2re.com/index-csharp.php3

Mit regex geht das bestimmt auch aber ich glaub das geht sobesser

1
string config="General Configuration.00.NodeAddress.Set.NodeAdr=0100"
2
char[] splitters= {' ','.','='};
3
string[] split = config.split(splitters);
4
5
config = split[0].ToLower() + split[1] + split[3] + "_" + split[4] + "(" + split[6] + ")";

vorausgesetzt die Struktur bleibt einigermaßen stabil

von Leon E. (adiagi)


Lesenswert?

Hi,

ja mit Regex bekomm ich nicht so richtig hin.

@ Sebastian

laut meiner Ausgabe bekomm ich folgenden String für config


1
"generalConfigurationNodeAddress_Set(0100)"

ich wollte jedoch
1
"generalConfiguration.NodeAddress_Set(0x100)" //mit "0x" , da Zahl

und für
1
General Configuration.00.SetDeviceMode.StartResult.DeviceMode=Slave

will ich
1
generalConfiguration.SetDeviceMode_StartResult(Slave) // ohne "0x" weil keine Zahl

ich hoffe ihr könnt mir helfen.

Gruß

Agit

von Leon E. (adiagi)


Lesenswert?

hi,

also ich versuche nochmals das Schema zu erklären,

Der text, der zu manipulieren is, hat folgende Struktur.
1
General Configuration.00.NodeAddress.Set.NodeAdr=0100

bis zur dieser Stelle "General Configuration.00.NodeAddress."

ist es kein problem.

nun kann es sein, dass Set, Get, SetGet folgt.
also nehmen wir an:

dieser String
Set.NodeAdre=0200;

sollte so aussehen
Set(0x200);


SetGet.NodeAdre=vierzig;
sollte so aussehen
SetGet(vierzig);


dieser String,
Get.NodeAdre1= 200.NodeAdre2 = vierzig; //zwei Parameter

sollte so ausshen
Get(0x200, vierzig) // zwei Parameter

Gruß

Agit

von Sebastian L. (Gast)


Lesenswert?

Hi,

also alles vorkauen will ich dir jetzt nicht
wenn du ein 0x noch brauchst füg es doch als string ein

und ob das ohne 0x brauchst kannst du ja prüfen

also sowas wie

int test = 0;
string hex = int.TryParse(split[6],out test) : "0x","";

von Sebastian L. (Gast)


Lesenswert?

wenn du also einen dynamischen string bauen willst musst du vorher deine 
Parameter abfragen und dann das ganze zusammenbauen.

dazu können dann auch mache Parameter leer sein die dann nur nach bedarf 
gefüllt werden

das hat also per se nix mit der string manipulation zu tun sondern 
einfache programmierlogik

die stringmanipulation als mittel zum zweck sollte man dann schon 
beherschen aber dazu gibts doch auch beschreibungen

http://msdn.microsoft.com/de-de/library/system.string.aspx

also so schwer ist das nun wirklich nicht

von Leon E. (adiagi)


Lesenswert?

HI,

@ Sebastian.
Danke für die Tipps.
Habs einigermaßen hinbekommen durch die SplitFunktion.

Jedoch habe ich noch eine Frage.

Wenn ich so ein Konstruklt habe:
1
General Configuration.00.MOSTNetworkEvents.Status.NetworkEventID=NIState.TimeOffset={Hour:0000,Minute:00,Second:00,MiliSecond:0000}.NetworkEventStatus={NetInterfaceState=NET_OFF}

würd ich gern die ganze geschweifte Klammer als Parameter übernehmen.
also so:
(es gibt 3 Parameter.)
1: NIState
2: {Hour:0000,Minute:00,Second:00,MiliSecond:0000}
3: {NetInterfaceState=NET_OFF}

Letzendlich sollte das rauskommen.
1
generalConfiguration.MOSTNetworkEvents_Status(NIState, Hour:0000,Minute:00,Second:00,MiliSecond:0000, NetInterfaceState=NET_OFF)

ich muss ihm sagen dass er die Zeichen zwischen den geschweiften 
klammern als ganzes kopiert und einfügt.

wenn ich weiter komme gebe ich bescheidl.

Gruß

Agit

von Sebastian-L (Gast)


Lesenswert?

Kannst du uns bitte erklären woher du solch grausige strings bekommst 
oder enttarnen wir dadurch deine hausaufgaben.

von Leon E. (adiagi)


Lesenswert?

hi,

ne ist keine hasuaufgabe,
muss es für das Praxissemester machen.
Erstelle da eine GUI, die Daten an eine Plattform verschickt.
Und durch diese String-Änderung soll der Vorgang automatisiert werden.

Gruß

Agit

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.