user1234
Goto Top

(Java) Array überprüfen - Eingabeparameter

Hallo zusammen,

ich habe ein Problem bei der Überprüfung eines Arrays.
Wenn args nicht eingegeben wurde, soll eine Fehlermeldung kommen.
Wenn args[1] nicht eingegeben wurde, soll etwas anderes passieren (hier noch nicht relevant).

Mit .lengt kann ich die Länge überprüfen und mit .equals kann man ja überprüfen, ob ein bestimmter Inhalt vorhanden ist.
Nur leider hilft mir das irgendwie nicht weiter.
/* FileSearcher.java
 * Reads all the data from a file and prints it.
 */
import java.io.*;

public class FileSearcher {
	public static void main(String args) {
		String searchString = args;
		
		String fileOrDir = args[1];	
		checkArgs(args);	
			File nFile = new File(fileOrDir);					
			if (nFile.isDirectory()) {
				pathSearch(searchString, fileOrDir);					
			}
			else {				
				simpleSearch(searchString, fileOrDir);
			}
					
	}
	public static void checkArgs(String args){
        if (args =="" ) {  
            System.out.println("Es wurde kein Suchwort eingegeben!");  
        }       
	}
	
	public static void simpleSearch(String searchString, String fileOrDir){
// tu was cooles
	}
	
	public static void pathSearch(String searchString, String fileOrDir){
// tu was cooles
        }
}

Auf eine Antwort würde ich mich sehr freuen.

Gruß

Content-Key: 183273

Url: https://administrator.de/contentid/183273

Printed on: April 26, 2024 at 06:04 o'clock

Member: mak-xxl
mak-xxl Apr 09, 2012 at 11:26:05 (UTC)
Goto Top
Moin user1234,

Mit .lengt kann ich die Länge überprüfen und ...

... das ist es doch (fast, weil .length) schon:

in Zeile 8 des Codes evtl. zunächst so prüfen:
for (int i = 0; i < args.length; i++) ...
In der Schleife kannst Du prüfen, was immer Dir sinnfällig erscheint, oder Du wertest nur die Variable i aus (Anzahl übergebener Argumente).

Frohe Ostern und freundliche Grüße von der Insel - Mario
Member: user1234
user1234 Apr 09, 2012 at 11:38:52 (UTC)
Goto Top
Hallo Marios,

danke für deine Antwort.

Die Idee kam mir auch schon in den Sinn, jedoch kann ich damit folgendes nicht umsetzen:
- wenn args leer ist -> Fehlermeldung und Programm soll geschlossen werden
- wenn args[1] leer ist -> Bestimmte Default-Parameter (Verzeichnisse) sollen als Wert genommen werden

Frohe Ostern und Grüße vom Festland ;)
Member: mak-xxl
mak-xxl Apr 09, 2012 at 11:55:20 (UTC)
Goto Top
Zitat von @user1234:
Die Idee kam mir auch schon in den Sinn, jedoch kann ich damit folgendes nicht umsetzen:
- wenn args leer ist -> Fehlermeldung und Programm soll geschlossen werden

Wieso nicht? So:
...
if(args == ""){  
 System.out.println("1. Parameter leer! Muss aber sein: xx");  
 System.out.exit(1);
}

- wenn args[1] leer ist -> Bestimmte Default-Parameter (Verzeichnisse) sollen als Wert genommen werden
dito. Nur Mut.

Wenn vorher sichergestellt wurde, dass Argumente übergeben wurden (args.length), dann gibt es bei dieser Abfrage auch keine ArrayOutOfBounds-Exception.

Frohe Ostern und freundliche Grüße von der Insel - Mario
Member: user1234
user1234 Apr 11, 2012 at 07:43:22 (UTC)
Goto Top
Ja. Aber ArrayOutOfBounds-Exception soll nicht kommen. Auch nicht, wenn nicht alle Argumente übergeben wurden!

Jetzt kommt natürlich so ein Fehler immer.
Member: mak-xxl
mak-xxl Apr 11, 2012 at 08:20:15 (UTC)
Goto Top
Moin user1234,

Zitat von @user1234:
Ja. Aber ArrayOutOfBounds-Exception soll nicht kommen. Auch nicht, wenn nicht alle Argumente übergeben wurden!

Jetzt kommt natürlich so ein Fehler immer.

Ja, wenn man nun so gar nichts selbst kombiniert:

Im ersten Post wurde Dir 'args.length' nahegelegt, im zweiten gezeigt, wie man in Java anhand der Argumentüberprüfung einen Ausstieg vornimmt - ein wenig Beschäftigung mit den Grundlagen hilft einem hier aufs Pferd, etwa so:

/* alle Parameter, so vorhanden, ausgeben */
for (int i = 0; i < args.length; i++) {
    if (i < args.length) {
        a = a + args[i] + ", ";  
    }
    System.out.println(a);
}

Anders formatiert:

/* alle Parameter, so vorhanden, ausgeben */
for (int i = 0; i < args.length; i++) {
    if (i < args.length) {
        System.out.println("args[i]\n");  
    }
}

Oder so:

/* Kein(e) Parameter -> Warnung */
if (args.length == 0) {
    System.out.println("Gib mir 2 Parameter mit auf den Weg!\n");  
    System.out.exit(1);
}

Und im Sinne der Nutzenstiftung:

/* überhaupt Parameter übergeben? */
if(args.length == 0){
 System.out.println("Kein Parameter übergeben. Programmende.");  
 System.out.exit(1);
}
/* 1 Parameter übergeben */
if(args.length == 1){
    /* Parameter ist leer */
    if(args == ""){  
     System.out.println("1. Parameter leer! Muss aber sein: xx");  
     System.out.exit(1);
    } /* hier kann die Else stehen ... */    
}

Parameter auf 'leer' prüfen ist hier wohl relativ sinnlos, besser wäre eine Prüfung auf 'String', 'Numeric' oder Länge ...

Freundliche Grüße von der Insel - Mario
Member: user1234
user1234 Apr 11, 2012 at 09:18:27 (UTC)
Goto Top
Okay. Noch einmal eine Frage:
Wenn ich die Datei per Console ausführe, müsste man dies ja so machen:
"java FileSearcher.java Suchwort Pfad"

Ist es möglich, als Parameter nur den Pfad mitzugeben?

Oben bei deinem Code gehst du ja davon aus, dass insgesamt ein Argument übergeben wurde,
und das nur Pfad übergeben wurde. Ist dies so möglich?


Ich hoffe ich habe mich verständlich ausgedrückt.

Vielen Dank bisher für deine Mithilfe.
Gruß
Member: mak-xxl
mak-xxl Apr 11, 2012 at 09:44:13 (UTC)
Goto Top
Moin user1234,

Zitat von @user1234:
Wenn ich die Datei per Console ausführe, müsste man dies ja so machen:
"java FileSearcher.java Suchwort Pfad"

Ja.

Ist es möglich, als Parameter nur den Pfad mitzugeben?

Ja. Die Anzahl der Parameter ist beliebig. Und daran denken: Pfade mit Leerzeichen in Literale setzen.

Oben bei deinem Code gehst du ja davon aus, dass insgesamt ein Argument übergeben wurde,

Nein. Der Code prüft zunächst, ob ein Parameter übergeben wurde:

if(args.length == 0)

'args.length' gibt die Anzahl der übergebenen Parameter zurück - nicht die Länge eines einzelnen Parameters. Wenn Du also 2 Parameter übergeben hast, ist 'args.length' = 2 (Cave: Im Array 'args' ist dann die Obergrenze = 1).
Ich habe lediglich die Auswertung für einen Parameter angedeutet.

und das nur Pfad übergeben wurde.

Was übergeben wurde, musst Du prüfen:
- wenn klar ist, das überhaupt ein oder mehrere Parameter übergeben wurden,
- die Parameter separiert vorliegen (das besorgt dass Array 'args' automatisch,
- sie angesprochen werden, i.e. per args

Ich hoffe ich habe mich verständlich ausgedrückt.

Hast Du - ich hoffe:
Parameter auf 'leer' prüfen ist hier wohl relativ sinnlos, besser wäre eine Prüfung auf 'String', 'Numeric' oder Länge ..
ich auch. Und es gibt noch viele Ansätze, Dir das solange zu erklären, bis Klarheit herrscht. face-smile

Also, in diesem Sinne - schön neugierig bleiben!

Freundliche Grüße von der Insel - Mario
Member: user1234
user1234 Apr 11, 2012 at 11:12:51 (UTC)
Goto Top
Danke Mario.

Das mit dem .length habe ich bereits verstanden.
Eine Frage noch wegen den Parametern:

So sollte die Eingabe ja aussehen:
"java FileSearcher.java Suchwort Pfad"
also
"java FileSearcher.java Test file.txt"

args habe ich als Suchwort definiert.
args[1] als Datei/Pfad

Aber wie kann ich jetzt nur args[1] (Datei) angeben?
"java FileSearcher.java file.txt"
Dort würde das file.txt ja args sein und args[1] wäre leer. Richtig?

Ich sehe noch keine Möglichkeit, per Eingabe über die Konsole nur args[1] anzugeben.

Danke für deine Hilfe.
Member: mak-xxl
mak-xxl Apr 11, 2012 at 11:31:50 (UTC)
Goto Top
Moin user1234,

Zitat von @user1234:
Aber wie kann ich jetzt nur args[1] (Datei) angeben?

Gar nicht - siehe weiter unten.

"java FileSearcher.java file.txt"
Dort würde das file.txt ja args sein und args[1] wäre leer. Richtig?

Nicht leer - 'args[1]' existiert dann nicht, ein Zugriff darauf ergibt folglich 'ArrayOutOfBounds'.

Ich sehe noch keine Möglichkeit, per Eingabe über die Konsole nur args[1] anzugeben.

Nur - geht nicht. Aber:

Wenn Dein Hintergedanke der ist, dass Deine Anwendung auch ohne Pfadangabe rennt, niemals aber ohne Suchwort, dann musst Du, wenn nur ein Parameter gegeben ist, diesen prüfen:
- ist es eine Pfadangabe (i.e. Back-/Slashes drin?)
- wenn nein, nimm diesen Parameter als Suchwort und suche in einem irgendwo von Dir definiertem Standardpfad.

Viel besser ist es aber, wenn Du den Programmaufruf so umstrickst, dass der Anwender mit 'Pflichteingaben' konfrontiert wird, etwa so:

java programm.java --t=Suchbegriff --p=Suchpfad
oder so:
java programm.java /t=Suchbegriff /p=Suchpfad
oder ähnlich.

Dann haben die Parameter eine 'Kennung', von denen '-p' leer sein kann (dann Standardpfad oder Hinweis) und '-t' nie leer sein darf (dann Warnung und Programmende).

Die Überprüfung, ob Parameter übergeben wurden und diese sinnfällig sind, ist immer notwendig.

Freundliche Grüße von der Insel - Mario
Member: user1234
user1234 Apr 11, 2012 at 11:40:10 (UTC)
Goto Top
Okay.

Vielen Dank! Eine schöne Restwoche!
Gruß