Zeichenlängen in .txt erkennen



  • Lordakius schrieb:

    Aber ist halt das, was ich mit meinen Fähigkeiten hinkrieg.

    Belli schrieb:

    Und stattdessen kann man dann auch einfach den Ordner auf die exe-Datei ziehen.

    Kommt nicht infrage. (s.O)

    Das heißt, Du kriegst es mit Deinen Fähigkeiten nicht hin, einen Ordner auf die exe-Datei zu ziehen?

    Lordakius schrieb:

    Belli schrieb:

    Belli schrieb:
    Bevor Du Dich mit GUI-Programmierung beschäftigst, solltest Du erst mal einige Grundlagen lernen.

    Bin ich grad bei, gib mir doch wenigstens die Möglichkeit da mal reinzuschnuppern ...

    Ich halte Dich nicht davon ab. Aber ich werde auch nicht versuchen, Dir den dritten Schritt vor dem ersten beizubringen. Das würde mich zuviel Nerven kosten ... ich merke das schon in diesem Thread hier ...



  • Belli schrieb:

    Lordakius schrieb:

    Aber ist halt das, was ich mit meinen Fähigkeiten hinkrieg.

    Belli schrieb:

    Und stattdessen kann man dann auch einfach den Ordner auf die exe-Datei ziehen.

    Kommt nicht infrage. (s.O)

    Das heißt, Du kriegst es mit Deinen Fähigkeiten nicht hin, einen Ordner auf die exe-Datei zu ziehen?

    War vllt blöd ausgedrückt ... ich versuchs nochmal:
    Ich werde das Programm nicht nutzen. Die Person, die das haben möchte, will es halt nicht reinziehen. SO ist das und damit muss ich umgehen.

    Belli schrieb:

    Ich halte Dich nicht davon ab. Aber ich werde auch nicht versuchen, Dir den dritten Schritt vor dem ersten beizubringen. Das würde mich zuviel Nerven kosten ... ich merke das schon in diesem Thread hier ...

    Da hast du auch recht. Ich erwarte auch nicht dass du mir alles erklärst (find ich schon super, dass du mir überhaupt hilfst.)
    Aber du möchtest mir doch nicht sagen, dass der erste Schritt das Reinziehen eines Verzeichnisses in eine .exe ist?

    Ich weiß, dass du mehr Erfahrung hast als ich. Deshalb bitte ich Dich, mich aufzuklären: Gehe ich das ganze Projekt falsch an? Habe kaum Erfahrung in der Software-Entwicklung und bin deswegen auf Hilfe angewiesen. (Natürlich könnte ich auch auf die harte Tour das komplette Projekt selbstständig machen, aber ich hatte diesmal ein schmales Zeitfenster.)

    Ich befasse mich (ernsthaft) erst seit ein paar Monaten damit und muss nebenbei noch zur Schule/Uni gehen und mich um den Kram kümmern. Das ist alles nicht so leicht (aber wem erzähl ich das? Du hast das ja schon hinter dir, oder?)
    Deshalb kann ich nur auf die Geduld von Erfahrereren (😕), wie dir, hoffen.

    ➡ Nun, wieder zurück zum Thema. Bitte.

    DirkB schrieb:

    Hast du auch auf

    if(argc > 1)
    

    verbessert?

    Den teil hab ich gar nicht mehr bei mir drin.



  • DirkB schrieb:

    Mach mal

    #include  <stdio.h>
    
    int main(int argc, char **argv)
    {  int i;
     
       for(i=0;i<argc;i++)
         printf("%d. Argument: %s\n", argv[i]);
    
       printf("Ende. Bitte Entertaste druecken\n");
       getch();
    
       return 0;
    }
    

    Und zieh dann einen Ordner auf das Icon von der Exe

    Was passiert?

    Er gibt mir beim Kompilieren folgenden Fehler:

    `getch' undeclared (first use this function)
    


  • Ich hab extra nachgesehen und dann doch nicht geändert. schäm
    Die funktion heißt getchar();



  • DirkB schrieb:

    Ich hab extra nachgesehen und dann doch nicht geändert. schäm
    Die funktion heißt getchar();

    Ich bin der Letzte, der dich dafür verurteilen wird 😉

    11013901. Argument: (x)|pfeil nach oben|umgedrehtes ?  //(x) merkwürdiges Symbol | nicht beachten, das steht alles ohne leerzeichen
    11013944. Argument: (x)|pfeil nach oben|umgedrehtes ? //Ausgenommen von der Zahl ist alles gleich.
    

    Sonst passiert nix. Kann mit der Ausgabe nich wirklich was anfangen 😕



  • Das kommt davon, wenn man es nur aus dem Kopf macht.

    printf("%d. Argument: %s\n", i, argv[i]); // Das i hat gefehlt
    


  • Lordakius schrieb:

    War vllt blöd ausgedrückt ... ich versuchs nochmal:
    Ich werde das Programm nicht nutzen. Die Person, die das haben möchte, will es halt nicht reinziehen. SO ist das und damit muss ich umgehen.

    Die Person möchte lieber jedes Mal zuerst in einer Batch-Datei rumeditieren, um den richtigen Ordner zu verarbeiten?
    Fällt mir schwer zu glauben ...

    Lordakius schrieb:

    Da hast du auch recht. Ich erwarte auch nicht dass du mir alles erklärst (find ich schon super, dass du mir überhaupt hilfst.)
    Aber du möchtest mir doch nicht sagen, dass der erste Schritt das Reinziehen eines Verzeichnisses in eine .exe ist?

    Nee, natürlich nicht!

    Lordakius schrieb:

    Deshalb bitte ich Dich, mich aufzuklären: Gehe ich das ganze Projekt falsch an?

    Vielleicht habe ich Dein 'Projekt' einfach nur nicht verstanden. Ursprünglich ging es mal um ein Programm, das eine Datei einlesen sollte, und die Länge der einzelnen Zeilen überprüfen soll?
    Das würde ich kaum als Projekt bezeichnen, das ist eine Aufgabe für die Frühstückspause ...

    Und solange das bei Dir anders ist, solltest Du Dich nicht mit GUI beschäftigen. Meiner Einschätzung nach benötigst Du außerdem für die meisten GUI-Libraries C++. Auf Anhieb fällt mir nur die WinAPI ein, die allein mit C - Kenntnissen auskommt.



  • DirkB schrieb:

    Das kommt davon, wenn man es nur aus dem Kopf macht.

    printf("%d. Argument: %s\n", i, argv[i]); // Das i hat gefehlt
    

    @Lord:
    Solange Du solche Kleinigkeiten nicht selbstständig erkennen/verbessern kannst, fehlen Dir definitiv jede Menge Grundlagenkenntnisse.
    Diese wirst Du kaum hier im Forum bekommen.

    Ich sage das nicht, um Dich zu ärgern! Ist Erfahrung. Schriebst Du nicht irgendwo, Du seist 15 Jahre alt? Dann vertrau mir ruhig mal. Ich habe einige Jahrzehnte mehr Erfahrung.



  • Belli schrieb:

    Lordakius schrieb:

    War vllt blöd ausgedrückt ... ich versuchs nochmal:
    Ich werde das Programm nicht nutzen. Die Person, die das haben möchte, will es halt nicht reinziehen. SO ist das und damit muss ich umgehen.

    Die Person möchte lieber jedes Mal zuerst in einer Batch-Datei rumeditieren, um den richtigen Ordner zu verarbeiten?
    Fällt mir schwer zu glauben ...

    Ja, fiel mir auch schwer, aber ich muss mich an die Vorgaben halten^^

    Lordakius schrieb:

    Deshalb bitte ich Dich, mich aufzuklären: Gehe ich das ganze Projekt falsch an?

    Vielleicht habe ich Dein 'Projekt' einfach nur nicht verstanden. Ursprünglich ging es mal um ein Programm, das eine Datei einlesen sollte, und die Länge der einzelnen Zeilen überprüfen soll?
    Das würde ich kaum als Projekt bezeichnen, das ist eine Aufgabe für die Frühstückspause ...[/quote]

    war es vllt mal, aber mittlerweile ist es doch etwas komplex(er) geworden und ging für mich in Bereiche, die ich mir noch nie angesehen habe (meine damit die stream funkionen).

    Und das Ursprungsprojekt war ja eigentlich auch eine Teilaufgabe.

    Belli schrieb:

    Und solange das bei Dir anders ist, solltest Du Dich nicht mit GUI beschäftigen. Meiner Einschätzung nach benötigst Du außerdem für die meisten GUI-Libraries C++. Auf Anhieb fällt mir nur die WinAPI ein, die allein mit C - Kenntnissen auskommt.

    Danke 🙂 War der eine Satz jetzt so schwer? ^^
    (verstehe natürlich was du meinst und will dich hier nicht überstrapazieren. 😕

    DirkB schrieb:

    Das kommt davon, wenn man es nur aus dem Kopf macht.

    printf("%d. Argument: %s\n", i, argv[i]); // Das i hat gefehlt
    
    0.Argument: "Pfad, wo die .exe steht"
    1.Argument: "Pfad des verzeichnisses, das ich reingezogen hab"
    

    Nett, aber nicht das was ich brauche. Sehe auch keine Möglichkeit, dass man alle Unterordner ausgibt. Es fehlen auch die Pfadlängen. (Pfadlänge wäre ja wieder strlen).
    Wäre vllt ein sinnvoller Ansatz gewesen, aber beim jetzigen Stand würde ich doch nur wieder von vorne anfangen.

    Wenn ich in einer implementierten Datei (path.ini) die function getPath() geschrieben habe, wo muss sich diese path.ini dann befinden, damit mein Programm sich auf den eingetragenen Pfad beziehen kann?

    Implementierung in *.c

    #include "path.ini"
    

    Inhalt von path.ini

    char *getPath()
    {
    	static char Path[] = { "C:\\Users\\Lordakius\\Desktop\\Informatik"};
    	return Path;
    }
    

    Aufruf von path.ini bzw getPath()

    char cmnd[1000] = "dir /s /b /ad ";
    	strcat(cmnd, getPath());
    

    hab schon ausprobiert die path.ini ins selbe verzeichnis zu stecken bringt aber nix

    #edit: (glatt was vergessen :D)

    FILE *f = _popen(cmnd, "r");
    

    lg Lordakius



  • Belli schrieb:

    DirkB schrieb:

    Das kommt davon, wenn man es nur aus dem Kopf macht.

    printf("%d. Argument: %s\n", i, argv[i]); // Das i hat gefehlt
    

    @Lord:
    Solange Du solche Kleinigkeiten nicht selbstständig erkennen/verbessern kannst, fehlen Dir definitiv jede Menge Grundlagenkenntnisse.
    Diese wirst Du kaum hier im Forum bekommen.

    Ich hätte den Fehler erkannt. Problem war, dass ich zunächst nicht verstanden hab, was der Sinn des Programms war (da meine Konzentration nicht vollständig auf den Quellcode gerichtet war 🙄 )

    Belli schrieb:

    Ich sage das nicht, um Dich zu ärgern! Ist Erfahrung. Schriebst Du nicht irgendwo, Du seist 15 Jahre alt? Dann vertrau mir ruhig mal. Ich habe einige Jahrzehnte mehr Erfahrung.

    Und dafür danke ich *Dir 🙂
    Wie gesagt, ich bin gerade in der Phase, mir die Grundlagen anzueignen.

    *Ich las einen Thread über die Rechtschreibung in Foren und ihrer Gewichtung als Indikator für Faulheit (oder so ähnlich) und dass du besonders auf Rechtschreibung/Großschreibung achtest. Aber seit wann schreibt man die Personalpronomen 2.Singular groß? oder hab ich zu dem Zeitpunkt im Grammatikunterricht geschlafen? 😃

    Grundsätzlich hab ich nix gegen, aber ich komm mir iwie so komisch vor ... Ist ein ganz anderes Gefühl ... kanns nich so richtig erklären 😕



  • Mit dem kleinen Programm wollte ich nur zeigen, wie einfach es ist, den zu durchsuchenden Ordner zu übergeben. Der steht halt in argv[1], wenn es das Argument überhaupt gibt (argc > 1)

    Den Rest mit den Pfadlängen musst du machen. Hat ja auch schon mal geklappt.

    Aber da der Nutzer ja kein Drag&Drop möchte, naja. Als Option kannst du es aber einbauen.

    Wenn du beim Dateinamen bei fopen keinen absoluten Pfad mit angibst, wird vom CWD (Current Working Directory) ausgegangen.
    Und das muss nicht der Pfad von der Exe sein.

    Evtl. kannst du aber über argv[0] daran kommen. In ein anderes Array kopieren ind das exe am Ende durch ini ersetzen.
    Kann sich aber auch ändern, wenn das Programm über PATH (eine Environment-Variable) gefunden wird.

    (Oder der Nutzer zieht die .ini auf das Programm. Dann kann er verschiedene nehmen 😃 )



  • Lordakius schrieb:

    Implementierung in *.c

    #include "path.ini"
    

    Inhalt von path.ini

    char *getPath()
    {
    	static char Path[] = { "C:\\Users\\Lordakius\\Desktop\\Informatik"};
    	return Path;
    }
    

    Das ist ein Präprozessor-Befehl und wird auch zur Compile-Zeit ausgewertet. Du müsstest also jedes Mal, wenn du die path.ini änderst das Programm neu Kompilieren.

    Außerdem ist das keine Ini-Datei, die sind anders aufgebaut.



  • Wirklich? ...
    Gibts da ne Möglichkeit, dass innerhalb einer Funktion zu machen?
    Oder einfach eine .txt mit dem Pfad drin und die zieht man dann auf die exe?
    Die Exe nimmt dann den pfad und führt die Aufgabe auf diesen Pfad aus.

    Jetz mal ganz abstrakt formuliert. Ist eine Umsetzung möglich?
    Man kann doch einfach den Inhalt der Datei lesen und als String in cmnd einfügen.
    Das wäre doch ne "einfache" Lösung?



  • Lordakius schrieb:

    Aber seit wann schreibt man die Personalpronomen 2.Singular groß? oder hab ich zu dem Zeitpunkt im Grammatikunterricht geschlafen? 😃

    So ist das mit der Erfahrung ... als ich noch Grammatikunterricht hatte, war das so korrekt.



  • Lordakius schrieb:

    Wirklich? ...
    Gibts da ne Möglichkeit, dass innerhalb einer Funktion zu machen?
    Oder einfach eine .txt mit dem Pfad drin und die zieht man dann auf die exe?
    Die Exe nimmt dann den pfad und führt die Aufgabe auf diesen Pfad aus.

    Jetz mal ganz abstrakt formuliert. Ist eine Umsetzung möglich?
    Man kann doch einfach den Inhalt der Datei lesen und als String in cmnd einfügen.
    Das wäre doch ne "einfache" Lösung?

    Was ist daran einfacher, als direkt das gewünschte Verzeichnis auf die exe zu ziehen?



  • Belli schrieb:

    Lordakius schrieb:

    Wirklich? ...
    Gibts da ne Möglichkeit, dass innerhalb einer Funktion zu machen?
    Oder einfach eine .txt mit dem Pfad drin und die zieht man dann auf die exe?
    Die Exe nimmt dann den pfad und führt die Aufgabe auf diesen Pfad aus.

    Jetz mal ganz abstrakt formuliert. Ist eine Umsetzung möglich?
    Man kann doch einfach den Inhalt der Datei lesen und als String in cmnd einfügen.
    Das wäre doch ne "einfache" Lösung?

    Was ist daran einfacher, als direkt das gewünschte Verzeichnis auf die exe zu ziehen?

    Die Fragestellung ist ja nicht das erste Mal in diesem Thread ... langsam is ja wohl genug 😃
    Ich kann deine Meinung durchaus nachvollziehen, aber wenn der User das nicht wünscht, dann halt nicht. (ehrlich gesagt, is doch nich mein Problem, wenn er es unbedingt so will (bzw unbedingt nicht so will);))

    ➡ Ich hatte da an fgets als funktion gedacht.

    fgets(name, MAX, stdin);
    

    Das habe ich hier gefunden: http://openbook.galileocomputing.de/c_von_a_bis_z/016_c_ein_ausgabe_funktionen_016.htm

    Statt stdin müsste dann der Stream aus der path-datei (dann halt keine ini ^^) stehen. Sollte es nicht auch möglich sein, den Stream sofort zu nehmen? Dann spar ich mir die Funktion fgets, oder geht es nicht ohne?

    #edit: auf selbiger Seite wurde auch das Umleiten eines Streams erklärt:
    "pfadlängenbetrachter.exe" < "path.txt"; (in meinem Beispiel)
    War das Pseudo-code oder geht das wirklich so? Was ist der Rückgabewert dabei?



  • Lordakius schrieb:

    Ich kann deine Meinung durchaus nachvollziehen, aber wenn der User das nicht wünscht, dann halt nicht. (ehrlich gesagt, is doch nich mein Problem, wenn er es unbedingt so will (bzw unbedingt nicht so will);))

    Wenn ich diesen Thread so durchgehe, gewinne ich den Eindruck, dass Dein User alle Nase lang etwas anderes möchte. Erst soll eine Datei mit Texten eingelesen werden, dann soll eine Batch-Datei verarbeitet werden, nun soll eine txt-Datei mit dem Ordnernamen auf die exe-Datei gezogen werden ...
    Vielleicht solltest Du erst mal genau ermitteln, was gemacht werden soll.
    Denn Dein Problem ist es dann ja wohl, das programmtechnisch umzusetzen ... obwohl, eigentlich auch nicht ... das wird ja wohl eher zum Problem des Forums hier ...

    Am Ende wird Dein User froh sein, überhaupt irgendetwas halbwegs funktionierendes von Dir zu bekommen.



  • Lordakius schrieb:

    Jetz mal ganz abstrakt formuliert. Ist eine Umsetzung möglich?
    Man kann doch einfach den Inhalt der Datei lesen und als String in cmnd einfügen.
    Das wäre doch ne "einfache" Lösung?

    Ja.

    Aber die sollte auch Idotensicher sein. Und das wird ein bisschen aufwendiger.
    - Leerzeichen\Tabulator und
    - Leerzeilen vor dem Pfad.
    - Leerzeiche dahinter
    - \n mit eingelesen
    - ....
    Und daran denken, dass die Natur immer bessere Idioten evolutioniert.

    Übliches vorgehen:
    Paramter von der Kommandozeile auswerten.
    Keine oder zuwenig da, dann den Nutzer fragen (fgets).
    Auch da kann man Copy&Paste machen. Ist in der Konsole aber etwas anders



  • überschreibt fgets() den String, den ich als ersten Parameter übergebe oder macht er das wie strcat?



  • Lies nach: http://www.cplusplus.com/reference/cstdio/fgets/
    oder probier es aus.

    Wenn du das überprüfst, dann z.B. mit

    printf("cmnd: <%s>\n", cmnd);
    

    und achte auf die Positionen der <>.
    Die sollten direkt vor und hinter dem Text stehen und nicht ind verschiedenen Zeilen.

    ^(Du musst ja nicht den Anfang vom String an fgets übergeben)^


Anmelden zum Antworten