Seite 1 von 1

Mittels Break oder Continue aus Schachtel-Schleifen raus

Verfasst: 27.01.2012 01:05
von Delle
Hallo,

im nachfolgenden Beispiel öffnet sich ein Filerequester und man wählt mehrere Dateien aus.

Danach wird eine Schleife durchlaufen und alles in eine LL geschrieben.

Sofern ein Dateiname schon in der LL vorhanden ist, soll er nicht gespeichert werden.

Das Beispiel funktioniert, sieht aber bischen "billig" aus.

Gibt es keine Möglichkeit das man von If Dateien()\Dateiname=load$" bei Erfolg gleich mittels Break/Continue runter zu Wend springt?

Das würde dieses "abbruch=1" usw. ersparen... Break(2) hilft ja hier auch nichts :-(

Code: Alles auswählen

load$=OpenFileRequester("",ordner$,"Texte (*.txt)|*.txt",0,#PB_Requester_MultiSelection)

If load$

	While load$

		ForEach Dateien()
		
			If Dateien()\Dateiname=load$
			
				MessageRequester("",load$+" ist bereits vorhanden!")
				abbruch=1
				Break
			
			EndIf
		
		Next
		
		If abbruch=1
		
			AddElement(Dateien())
			Dateien()\Dateiname=load$
			abbruch=0
		
		EndIf
		
		load$=NextSelectedFileName()

	Wend

EndIf

Re: Mittels Break oder Continue aus Schachtel-Schleifen raus

Verfasst: 27.01.2012 01:31
von NicTheQuick
Ich verstehe bei deinem Beispiel nicht, warum die die Datei wieder hinzufügst, wenn sie schon drin ist.

///Edit:

Du kannst aber auch 'load$' dazu missbrauchen:

Code: Alles auswählen

load$ = OpenFileRequester("", ordner$, "Texte (*.txt)|*.txt", 0, #PB_Requester_MultiSelection)

While load$ <> ""
	ForEach Dateien()
		If Dateien()\Dateiname = load$
			MessageRequester("", load$+" ist bereits vorhanden!")
			load$ = ""
			Break
		EndIf
	Next
	
	If load$ <> "" And AddElement(Dateien())
		Dateien()\Dateiname = load$
	EndIf
	
	load$ = NextSelectedFileName()
Wend

Re: Mittels Break oder Continue aus Schachtel-Schleifen raus

Verfasst: 27.01.2012 01:41
von Kiffi
@Delle: Nimm ne Map. Die verhindert per Default
identische Einträge:

Code: Alles auswählen

NewMap Dateien.s()

load$=OpenFileRequester("",ordner$,"Texte (*.txt)|*.txt",0,#PB_Requester_MultiSelection)

If load$
  While load$
    Dateien(LCase(load$))=load$
    load$=NextSelectedFileName()
  Wend
EndIf
Außerdem würde ich den Benutzer nicht mit den
Messageboxen nerven.

Grüße ... Kiffi

Re: Mittels Break oder Continue aus Schachtel-Schleifen raus

Verfasst: 27.01.2012 01:46
von Delle
NicTheQuick hat geschrieben:Ich verstehe bei deinem Beispiel nicht, warum die die Datei wieder hinzufügst, wenn sie schon drin ist.
Ja das sollte eigentlich in den nicht vorhandenen Else-Block ;)
Kiffi hat geschrieben:@Delle: Nimm ne Map. Die verhindert per Default identische Einträge:
Kenn ich nicht, mag ich nicht! :) Nein Spaß... hab noch nie damit gearbeitet, lese es mir aber gleich durch.
Kiffi hat geschrieben:Außerdem würde ich den Benutzer nicht mit den Messageboxen nerven.
Ja denk ich auch... entweder in nem Statusfeld ausgeben oder gar nicht :)

Re: Mittels Break oder Continue aus Schachtel-Schleifen raus

Verfasst: 27.01.2012 02:05
von ts-soft
@Kiffi
Der Key einer Map erlaubt ja tatsächlich alle Buchstaben, ich dachte eigentlich Sonderzeichen wären dort nicht erlaubt.
Hab ich auch wieder etwas dazugelernt, danke :allright:

Re: Mittels Break oder Continue aus Schachtel-Schleifen raus

Verfasst: 27.01.2012 02:41
von STARGÅTE
Du kannst das mit einer Fake-Schleife mache (die ich schon öfters im Forum angepriesen hab):

Code: Alles auswählen

Define FileNameList.s = OpenFileRequester("", "", "Texte (*.txt)|*.txt", 0, #PB_Requester_MultiSelection)

If FileNameList
	While FileNameList
		Repeat ; Fake-Schleife
			ForEach Dateien()
				If Dateien()\Dateiname = FileNameList
					Break 2 ; Aus ForEach und der Fake-Schleife springen.
				EndIf
			Next
			; wenn kein Sprung erfolgte, wird das hier ausgeführt
			AddElement(Dateien())
			Dateien()\Dateiname = FileNameList
		Until #True ; Fake-Schleife wird immer verlassen
		FileNameList = NextSelectedFileName()
	Wend
EndIf
@ts-soft: Ein Map-Key ist kein VariableName, dort sind sogar alle Zeichen erlaubt (auch Unicode) außer die NULL halt, weil es einfach n String ist.