(gelöst) Dateien zählen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
guennid

(gelöst) Dateien zählen

Beitrag von guennid » 13.01.2019 18:37:51

Code: Alles auswählen

test=find /usr/share/applications -maxdepth 1 -type f | wc -l
Wie kriege ich das Ergebnis in eine Variable?

Grüße, Günther
Zuletzt geändert von guennid am 15.01.2019 10:03:05, insgesamt 3-mal geändert.

cronoik
Beiträge: 2049
Registriert: 18.03.2012 21:13:42
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Dateien zählen

Beitrag von cronoik » 13.01.2019 18:50:24

Code: Alles auswählen

test=$(find /usr/share/applications -maxdepth 1 -type f | wc -l)
Hilf mit unser Wiki zu verbessern!

Benutzeravatar
MartinV
Beiträge: 790
Registriert: 31.07.2015 19:38:52
Wohnort: Hyperion
Kontaktdaten:

Re: Dateien zählen

Beitrag von MartinV » 13.01.2019 18:51:34

Code: Alles auswählen

zahl=$(find /usr/share/applications -maxdepth 1 -type f | wc -l)
Oder:

Code: Alles auswählen

zahl="$(find /usr/share/applications -maxdepth 1 -type f | wc -l)"
Besser "zahl" als "test", weil test auch ein Befehl ist.
Die Vernunft kann einem schon leidtun. Sie verliert eigentlich immer.

guennid

Re: Dateien zählen

Beitrag von guennid » 13.01.2019 18:54:32

:THX:

Entschuldigt bitte die blödsinnige Schreibweise in meinem Code-Schnipsel. Das war nicht der Ausdruck, den ich in die Variable stecken wollte, sondern der 1. (untaugliche) Versuch Selbiges zu tun. Martins Hinweis, die Verwendung von "test" betreffend, ist registriert. :wink:

guennid

Re: (gelöst) Dateien zählen

Beitrag von guennid » 13.01.2019 21:33:04

Doch noch nicht gelöst:

Wie kriege ich den Wert der Linux-Variablen, hier "zahl" in eine Pascal-Variable oder funktioniert das nur über die Anlage einer Datei?

Grüße, Günther

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: (gelöst) Dateien zählen

Beitrag von MSfree » 13.01.2019 21:53:58

guennid hat geschrieben: ↑ zum Beitrag ↑
13.01.2019 21:33:04
Wie kriege ich den Wert der Linux-Variablen, hier "zahl" in eine Pascal-Variable
Oha, meine Pascalzeiten sind schon eine Ewigkeit her :mrgreen:

Direkt bekommt man solche Werte auf zwei Arten in ein Programm. Entweder über Kommandozeilenparameter, die relevante Funktion dürfte ParamStr sein. Oder in Form einer Umgebungsvariable mit GetEnv.

Der Wert ist allerdings immer ein String und kein Integer, muß also noch umgewandelt werden.

guennid

Re: Dateien zählen

Beitrag von guennid » 13.01.2019 23:37:57

Das kriege ich in Bezug auf mein Shell-Kommando nicht gebacken. Ich werds wohl über eine Datei machen.

Grüße, Günther

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: Dateien zählen

Beitrag von MSfree » 14.01.2019 08:02:37

guennid hat geschrieben: ↑ zum Beitrag ↑
13.01.2019 23:37:57
Das kriege ich in Bezug auf mein Shell-Kommando nicht gebacken.
Das ist doch eigentlich ganz einfach:

Eine Umgebungsvariable hast du doch sowieso schon:

Code: Alles auswählen

test=`find /usr/share/applications -maxdepth 1 -type f | wc -l`
"test" ist hier deine Umgebungsvariable. Um diese für andere Programme sichtbar zu machen, mußt du sie nur exportieren:

Code: Alles auswählen

export test
Und dann rufst du dein Pascalprogram auf, zusammen also so

Code: Alles auswählen

#!/bin/bash
test=`find /usr/share/applications -maxdepth 1 -type f | wc -l`
export test
MeinPascalProgram
Dein Pascalprogramm könnte dann so aussehen:

Code: Alles auswählen

Program MeinPascalProgram;
uses Dos;

begin
var
  str : string;
  numFiles: integer;
 
  str := GetEnv('test'));
  numFiles = StrToInt(str);
  WriteLn('test ist ',str);
  WriteLn('numFiles ist ',numFiles);
end.

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: Dateien zählen

Beitrag von Phineas » 14.01.2019 14:45:03

Ich werde wohl nie verstehen, warum man sich hier, wie in vielen ähnlichen Fällen, mit einer 99%-Lösung zufrieden gibt. Dass es wohl kaum Jemanden gibt, der seine Dateinamen mit Newlines versieht, ist kein wirkliches Argument: Das Ding ist nun mal erlaubt - und nur das zählt (so wie wc -l Newlines zählt - und eben keine Dateien).

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: Dateien zählen

Beitrag von tobo » 14.01.2019 15:51:41

Ja, innerhalb von find ist alles geregelt und sicher, auch über -exec. Aber sobald man aus find rauspiped und die Daten einem anderen Programm übergibt, muss man aufpassen (z.B. wegen newlines). Wenn nur die Anzahl interessiert:

Code: Alles auswählen

find /usr/share/applications -maxdepth 1 -type f -printf "\n" | wc -l

guennid

Re: Dateien zählen

Beitrag von guennid » 14.01.2019 20:42:11

Hallo MSfree

Funktioniert.

Freepascal will allerdings die Funktion fpGetEnv (Unit baseUnix) statt GetEnv haben.

Ohne den Umweg über's shell-script wär's mir lieber gewesen, habe ich aber nicht hingekriegt.

Danke sehr! :THX:

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: Dateien zählen

Beitrag von MSfree » 14.01.2019 21:00:40

guennid hat geschrieben: ↑ zum Beitrag ↑
14.01.2019 20:42:11
Ohne den Umweg über's shell-script wär's mir lieber gewesen, habe ich aber nicht hingekriegt.
Eine Dateiliste kannst du dir auch mit Pascal erstellen. Ich habe das hier gefunden:
http://wiki.freepascal.org/FindAllFiles

Oder auch mit FindFirst, FindNext, wenn du es selbst zusammenklöppeln möchtest. Eigentlich ist das alles kein Hexenwerk. :wink:

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: Dateien zählen

Beitrag von tobo » 14.01.2019 21:01:15

guennid hat geschrieben: ↑ zum Beitrag ↑
14.01.2019 20:42:11
Ohne den Umweg über's shell-script wär's mir lieber gewesen, habe ich aber nicht hingekriegt.
Sowas?

Code: Alles auswählen

program RunShellCommand;

uses Process;

var s: AnsiString;

begin
  if RunCommand('/bin/sh', ['-c', 'find /usr/share/applications -maxdepth 1 -type f -printf "\n" | wc -l'], s) then
    WriteLn(s);
end.

guennid

Re: Dateien zählen

Beitrag von guennid » 14.01.2019 22:05:28

Von Objektorientierung habe ich keine Ahnung und ich will die auch nicht mehr kriegen.
Unkommentierte Shell-Syntax ist mir ein Greuel.
Ich bevorzuge Variablen- Funktions- und Prozedurnamen soweit möglich in Deutsch zu formulieren.
Ich mach' hier was für den Hausgebrauch.
Oder auch mit FindFirst, FindNext
Das kenn' ich. Hielt ich aber, ohne es überprüft zu haben, für DOS-Spezialitäten.

Antworten