hallo Dr.Z,
den string in einen char array zu konvertieren ist nicht nötig, da strings ja char-weise indexierbar sind.
hallo rzwanziger,
du könntest per RegEx die Zeichen zwischen den Anführungszeichen matchen, z.b. per RegEx.Matches("".+"");
Ich würde allerdings auch mit einem endlichen Automaten arbeiten der einmal über den string läuft und die zeichen extrahiert.
hallo,
bitte benutz die suchfunktion =)
Der Rückgabewert "..." kann nicht geändert werden, da er keine Variable ist
dann werden aber die klammern nicht beachtet =)
Mit VS 2008 Prof. funktioniert es mittlerweile relativ gut muss ich sagen. Verschwindet der Fehler denn nicht wenn du erfolgreich kompiliert hast?
wie lautet denn genau die fehlermeldung und wie schaut die xmlns deklaration aus?
ich will das jeder Text Teil vor Und nach jeder Booleschen Operator
(ob And , OR) In einem Textbox Kommt!
Dann ist String.Split wohl der falsche Ansatz.
Am besten läufst du über den String und schaust per Look-Ahead ob ein OR oder AND kommt.
data.Replace("(","");
data.Replace(")","");
Dieser Code hat keine Auswirkung auf data. Statt dessen solltest du
data = data.Replace("(","");
data = data.Replace(")","");
schreiben.
lad dir mal system.data.sqlite runter, http://sqlite.phxsoftware.com/
da gibt es ein tool "mergebin", mit dem man .Net assemblies und native DLLs zusammenfügen kann.
Hallo herbivore,
danke für deine ausführliche Antwort.
Ich werde es wohl in diesem zweistufigen Prozess machen, da ich ansonsten leider auch keine bessere Möglichkeit gefunden habe.
Möglich wäre noch, einen LL(k) Parser für die Regeln zu generieren. Dass dies dann allerdings performanter ist kann ich mir auch nicht vorstellen.
Viele Grüße,
feadur
Hallo herbivore,
der Algorithmus von Aho und Corasick löst das Problem, mehrere Patterns in einem Text zu finden, in O(n+m) Zeit, wobei n die Länge des Textes und m die Länge der Pattern ist.
Ich gehe deshalb davon aus, dass das entsprechende "Suchen-und-Ersetzen" Problem mit ähnlichem Aufwand lösbar sein muss.
Gruß
Hallo zusammen,
ich habe folgendes Problem:
Angenommen ich habe folgenden String:
aabaadcabd
Jetzt sollen in diesem String folgende Ersetzungen vorgenommen werden:
aab -> A
abaa -> B
ca -> C
Dabei ist zu beachten, dass wenn sich zwei Ersetzungsregeln überlappen, nur der längst-mögliche String erstzt werden soll.
Demnach ergibt sich folgende Ausgabe
aBdCbd
Natürlich ist dies sehr einfach, wenn man jeweils alle Regeln in der Reihenfolge der Länge des Strings abarbeitet. Damit hat man aber im schlechtesten Fall eine O(n * m) Komplexität.
Mein Ziel ist es, dies in linearer Zeit zu erreichen. Dazu war mein erster Ansatz die Implementierung des Automaten von Aho/Corasick. (link Dieser liefert mir aber wirklich ALLE möglichen Matches, inklusive sich überlappender Pattern. Dies macht die Sache nicht wirklich einfacher, da ich mir in einem Dictionary erst die längsten Matches merken muss, und danach mit diesen Informationen nochmal über den String laufen muss.
Kennt jemand einen Pattern Matching Automaten/Transducer, der dieses Problem effizient löst, so dass ich nur einmal über den String laufen muss um eine korrekte Ausgabe zu erhalten?
Für evtl. Tipps und Anregungen wäre ich euch sehr dankbar =)
feadur
//EDIT:
Da ich den Algorithmus später auf Bytes und nicht auf Strings anwenden möchte, hilft mir die .Net RegEx Machine leider nicht weiter =(
Die genannten Bücher sind gut, vor allem das von Frischalowski.
Welches Buch meiner Meinung nach nicht zu empfehlen ist, trotz des legänderen Autors ist:
wenn du mit "übersetzen" eine kompilierung in IL Code meinst - die findet nicht statt.
XAML wird bei der kompilierung der anwendung mit msbuild in eine binäre repräsentation namens BAML (binary XAML) überführt und dann zur laufzeit von einem parser in einen objektgraphen umgewandelt.
Original von Ghosti
Hab ich irgendwas vergessen??
ja, den CSHARP Tag =)
Siehe zur Lösung des Problems [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)
Gruß
Siehe [Hinweis] Wie poste ich richtig? in diversen Punkten.
Wir sind nicht für eure Hausaufgaben zuständig. Bitte stell konkrete Fragen, dann helfen wir gern.
Im übrigen ist dies kein C sondern ein C# Forum.
da XAML ein XML Dialekt ist, würde ja schon ein XML Syntax Highlighting reichen. Das fände ich auch sehr sinnvoll.
Original von ravel
ist aber echt dämlich diese fehlermeldung, da sie eine ganz andere zeile beschreibt und sowieso nichtssagend ist.
Das finde ich nicht, StackOverflowException deutet eigenltich immer auf eine Endlosschleife hin, bzw. wie in deinem Fall Rekursion ohne Anker.
hi,
poste doch mal die ganze Exception.
was machen die InitializeComponent Methoden?
Die Form ist kein Singleton da sie einen öffentlichen Konstruktor hat.
ja, du kannst native Funktionen auch in C# nutzen, Stichwort dazu ist DllImport.
wenn das sdk in form einer assembly vorliegt, kannst du es neben vb.net auch in c# verwenden.
geht es denn wenn du die Methode upperLower() entfernst? diese ist nicht CLS konform, die andere aber schon. deshalb versteh ich es jetzt nicht so ganz. wär mal interessant zu wissen.
hallo onlinegurke,
ja,
Cannot assign to 'x' because it is a 'foreach iteration variable'
naja, es ist im dem sinne syntaktisch nicht i.o, weil dieser code nicht compiliert werden kann =)
//edit: wobei man dann ehr sagen muss, dass es semantisch nicht ok ist. wie auch immer.
hallo nin,
die erste Variante funktioniert nicht, da foreach argumente schreibgeschützt sind. x kann also in der schleife kein wert zugewiesen werden.
Dictionary<T,T>? =)
Substring ist eine Methode der Klasse String und hat rein gar nichts mit Windows Forms zutun.
Bitte schau sowas in einem Buch nach,
z.b. http://www.galileocomputing.de/openbook/csharp/
hi,
für .Net 3.0 gibt es noch keine zertifikationen soweit ich weiss.
es spricht nichts dagegen sich .net 3.0 selbst beizubringen, wobei das auch kein problem sein sollte wenn du bereits erfahrungen mit 1.1/2.0 hast.
ich liebäugle auch mit einer MS zertifikation, weiss nur nich ob sich das für den bereich .net 2.0, windows forms noch lohnt.
was meinen die anderen?
gruß
oder du sellst für jeden typen einen TypeConverter bereit, der diese umwandlungen übernimmt. Schau dir mal TypeDescriptor.GetConverter an.
ich denke internal ist äußerst wichtig bei der entwicklung von klassenbibliotheken. dort gibt es klassen, die für den endbenutzer als public markiert sind und klassen, die als hilfsklassen internal markiert sind, um die sichtbarkeit auf das assembly einzuschränken.
wenn eine klassenbibliothek dann auch noch über mehrere assemblies verteilt wird (vielleicht, da sie von mehreren teams entwickelt wird), kann man die internen klassen dem jeweils anderen assembly mittels [InternalsVisibleTo] sichtbar machen.
von daher hat internal sehr wohl eine daseinsberechtigung.
hallo norman_timo,
es soll, wie du schon sagtest, nur die Problematik aufzeigen, dass man mit Monitor.Enter (bzw. lock) in den Besitz einer Sperre kommen kann (in Main).
Der Teil mit der Finalizer Methode dient nur zu Demonstrationszwecken.
Da der GarbageCollector in einem eigenen Thread operiert und von dort aus auf die Finalizer Methode zugreift, befindet dieser sich in einem Deadlock. Denn in Main wurde ja die Sperre für mc zuvor schon vom Hauptthread der Anwendung übernommen.
Deshalb hat dieses Beispiel eigentlich nichts mit der Frage nach Sinn und Unsinn von Destruktoren zutun.
Gruß
hallo zusammen,
hier ein interessantes beispiel dazu aus dem buch "CLR via C#" von J. Richter.
class MyClass
{
Object syncObj = new object();
~MyClass()
{
lock (this)
{
}
}
}
class Program
{
static void Main(string[] args)
{
MyClass mc = new MyClass();
Monitor.Enter(mc);
mc = null;
// Garbage Collection erzwingen
GC.Collect();
GC.WaitForPendingFinalizers();
Console.Write("Hier kommen wir nur an bei lock(syncObj) in ~MyClass");
Console.ReadKey();
}
}
ich finde das demonstriert eigentlich recht gut, warum man besser auf lock(this) verzichten sollte.
hallo zusammen,
wie kann ich dem property denn dann in der klasse die es definiert, einen wert zuweisen, wenn ich den setter entferne?
also sowas wie
class MyClass
{
public int Zahl { get; }
public MyClass()
{
Zahl = 2; // Das geht nicht...
}
}
falls es keinen zugriff auf das private feld gibt, dürfte das ja gar nicht funktionieren, oder? Ich nehme also mal an, dass man bei automatischen Properties den setter nicht entfernen darf?
gruß
du könntest IClonable für Datensatz implementieren und dann sowas schreiben
ArrayList list = new ArrayList();
Datensatz daten = new Datensatz();
for (int i = 0; i < 10; i++)
{
daten = daten.Clone();
daten.x = i;
list.Add(daten);
}
Übrigens würd ich statt ArrayList List<Datensatz> nehmen.
ich vermute mal, dass du das mit den booleschen werten noch nicht ganz verstanden hast, deshalb schau dir mal
[Tipp] Anfängerfehler == true / == false
an.
gruß
CAmpel.nextState erwartet System.Timers.Timer, du übergibst aber System.Windows.Forms.Timer.
Bitte verwende die C# Code Tags, dann wird das ganze um einiges übersichtlicher.
(Siehe [Hinweis] Wie poste ich richtig?)
eigentlich nur in xaml statt "StaticResource" "DynamicResource" schreiben.
Wo ist denn da genau dein Problem??
Als Beispiel ein Style für eine TextBox:
TextBox box = new TextBox();
box.Text = "Test";
Style style = new Style();
Setter setter = new Setter();
setter.Property = TextBox.BackgroundProperty;
setter.Value = new SolidColorBrush(Colors.Red);
style.Setters.Add(setter);
box.Style = style;
Grid1.Children.Add(box);
siehe http://msdn2.microsoft.com/de-de/library/3278tedw(VS.80).aspx
bzw.
http://www.galileocomputing.de/openbook/visual_csharp/visual_csharp_07_003.htm
Stichworte sind Casting und Generics.
Gruß
dann hast du wohl den "alten" Stack verwendet, also müsstest du
Klammer aktuell = (Klammer) stack.Pop()
schreiben.
Besser wäre es wenn du Stack<Klammer> nimmst.
Eigentlich musst du nur ein Style Objekt erstellen und dieses einer entsprechenden Style Eigenschaft zuweisen... =)
Wie hast du es denn versucht? Code?
Hi,
warum ruft du das neue Fenster nicht einfach mittels Window.ShowDialog auf? Dann erstellst du noch eine neue Methode um die Liste der Daten zu übergeben, die angezeigt werden soll.
also diese frage kann ja jetzt nicht dein Ernst sein... =)
bitte schau dazu mal in die msdn dokumentation.
wie erstellst du diese instanzen denn?
trotzdem existiert ja ein Property WebBrowser.Tag, ist aber evtl. eben null. =)