Forum: PC-Programmierung C# Programm zum filtern von Bildsequenzen


von Michael (Gast)


Lesenswert?

Ich versuche momentan ein Programm zu schreiben, welches Fehlerhafte 
bilder aus einer Sequenz herausfiltert und verschiebt bzw. löscht. Als 
basis für die Suche habe ich eine Liste, in welcher die Rendertasks 
(Bildnummer) stehen. somit hätte ich zum Beispiel das fehlerhafte Bild 
Rendering_0123 und in der liste würde 123 stehen. Das Problem dabei ist, 
dass wenn ich mit String.Contains nach 123 suche, auch das bild 1230 und 
das Bild 1123 gelöscht werden. je nach Sequenz werden allerdings 
unterschiedlich viele Nullen vorgereiht. Da sich das ganze aber auf 
andere Sequenzen anwenden lassen sollte, kann ich nicht einfach eine 
vorgegeben Anzahl von nullen vorreihen.

Nun hätte ich den Ansatz beide Strings von hinten nach vorne zu 
vergleichen, da sich die Nummerierung immer am Ende des Dateinamens 
befindet. allerdings bin ich grad ziemlich planlos wie ich das am Besten 
anstellen sollte...

mfg Michael

von Peter II (Gast)


Lesenswert?

Michael schrieb:
> Nun hätte ich den Ansatz beide Strings von hinten nach vorne zu
> vergleichen, da sich die Nummerierung immer am Ende des Dateinamens
> befindet. allerdings bin ich grad ziemlich planlos wie ich das am Besten
> anstellen sollte...

und warum nicht einfach die Zahl extrahieren? z.b. Regex.

Oder alles löschen was ungleich einer Ziffer ist, dann als int wandeln.

von Borislav B. (boris_b)


Lesenswert?

ich würde so vorgehen:

1. Zahl herausschneiden:
1
var startIndex = myString.IndexOf('_');
2
var endIndex = myString.IndexOf('.');
3
var numberString = myString.Substring(startIndex, endIndex - startIndex);

2. Zahl in Int konvertieren:
1
var number = Int32.Parse(numberString);

(Achtung: mehr oder weniger C#-Pseudocode!)

von Michael (Gast)


Lesenswert?

Super Danke!

Ich habs mit der Methode von Boris hinbekommen. Nun hab ich nur noch ein 
weiteres (eher kosmetisches) Problem. Wärhend der suchvorgang läuf hängt 
das Programm. wie kann ich dem nutzer am besten mitteilen, dass der 
suchvorgang gerade läuft? Ich habe leider bisher noch nichts derartiges 
programmiert und habe daher keinen Plan wie ich das umgehen kan...

MfG Michael

von Peter II (Gast)


Lesenswert?

Michael schrieb:
> ? Ich habe leider bisher noch nichts derartiges
> programmiert und habe daher keinen Plan wie ich das umgehen kan...

.net bietet dafür einen Backgroundworker an. Dann blockier die GUI nicht 
und du kannst anzeigen was du willst.

von Borislav B. (boris_b)


Lesenswert?

Peter II schrieb:
> .net bietet dafür einen Backgroundworker an. Dann blockier die GUI nicht
> und du kannst anzeigen was du willst.

Das wäre sinnvoll.

Zusätzlich kannst du nach dem Start des Workers noch den Mauscursor auf 
"Sanduhr" einstellen, und ggf. den Start-Button disablen (damit er nicht 
noch mal gedrückt wird).

Auch eine Fortschrittsanzeige oder Ähnliches machen sich sicherlich gut 
;-)

von fgfazdvsfg (Gast)


Lesenswert?

Michael schrieb:
> String.Contains

Ein String.EndsWith hätte es auch getan

Michael schrieb:
> da sich die Nummerierung immer am Ende des Dateinamens
> befindet.

von Kurt (Gast)


Lesenswert?

Michael schrieb:
> Da sich das ganze aber auf
> andere Sequenzen anwenden lassen sollte, kann ich nicht einfach eine
> vorgegeben Anzahl von nullen vorreihen.

Wie meinst Du das?

Du solltest ein ein-eindeutiges Format vorgeben.

Gruß Kurt

von Johnny B. (johnnyb)


Lesenswert?

Am besten/flexibelsten gehts wohl mit REGEX.
Zum testen und üben kann ich folgende Website empfehlen: 
http://regexpal.com/

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.