Scan-Prog

Hallo Community!

Weiß nicht, wo ich das sonst reinstellen soll, deshalb schreib ich mal in Programmierung allgemein.

Ist es möglich ein Programm zu schreiben, dass aus einem Text automatisch bestimmte Wörter scannt?

Also so nach dem Motto:

Text:

Wert a: 34
Wert b: 56 und der Wert c soll sein 76, dazu noch Wert d 98

Ausgabe:
a=34, b= 56, c=76, d=98

oder noch besser:
34 56 76 98

wobei die zahlen natürlich auch andere sein könnten, oder eben auch Worte (die aber vorher definiert sind, also keine willkürlichen, sondern etwa 20 verschiedene, die allerdings alle bekannt sind).

Is es schwierig für nen Laien sowas zu machen, oder gibt es sowas vielleicht schon??

Vielen Dank schon mal im Vorraus

Hallo Hannes1606,

das sollte machbar sein. Alle Buchstaben entfernen es sei es sind die erwähnten 20 Wörter alle mehrfache Blanks auf ein Balnk reduzieren und das skizzierte Ergebnis ist vorhanden. (Geht schneller, wenn den Wörter vorher Zahlenwerte zugeordnet kann.) Details kann man erst genauer sagen, wenn die Programmiersprache bekannt ist.

Grüsse Georg V.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo

Weiß nicht, wo ich das sonst reinstellen soll, deshalb schreib
ich mal in Programmierung allgemein.
Ist es möglich ein Programm zu schreiben, dass aus einem Text
automatisch bestimmte Wörter scannt?
Also so nach dem Motto:
Text:
Wert a: 34
Wert b: 56 und der Wert c soll sein 76, dazu noch Wert d 98
Ausgabe:
a=34, b= 56, c=76, d=98
oder noch besser:
34 56 76 98

Wahrscheinlich kein Problem, soll das für Windows, Unix,
Mac sein? Häng doch mal einen konkreten Beispieltext und
die konkrete Suchwortvorschrift an, dann kann man mal so
ein Progrämmchen schreiben.

Grüße

CMБ

PS.: Das „Programm“, welches für
Deinen geschilderten Fall zu-
träfe, lautet (in Perl, siehe
http://www.activestate.com/store/download.aspx?prdGU…):

 my @words = qw'a b c d e';
 my @table = map "\\b$\_\\b\\D+(\\d+)", @words;
 my @found;

 while( ){
 for my $id (0..@words-1) {
 push @{$found[$id]}, /$table[$id]/g ;
 }
 }

 for my $id (0..@words-1) {
 print "$words[$id] = @{$found[$id]} \n"
 if @{$found[$id]}
 }

cmd.exe also Eingabeaufforderung

und da mal

help FINDSTR

eingeben.

das ist zum suchen von texten in files

mbiniert mit ein paar anderen befehlen geht das auch verzeichniss weise etc

das muss idr aber mal wieder ein anderer erklären der dos mag.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Hannes,

wie die anderen Antworten schon zeigen gibt es etliche solcher Programme, bzw. Möglichkeiten das zu machen.
Das Problem ist aus Programmierersicht auch nicht sehr groß, und ist denke ich sogar sehr geeignet um das ganze mal zu üben.

Um das ganze mal auszuprobieren musst Du halt in der Programmiersprache Deiner Wahl eine Datei öffnen. Das ist, meines Erachtens nach, am Anfang immer das blödeste. Aber im Netz gibt es viele Beispiele, und bei Wikibooks auch passende Bücher. Ist aber ganu gut das mal zu machen, man lernt dabei.

Wenn Du so ne Datei erstmal geöffnet hast, kannst Du recht einfach nach und nach einzelne Zeichen einlesen.

Kannst ja einfach mal überlegen, wie das ganze ablaufen müsste. Kannst das dann ja in Pseudo-Code posten, dann sagt Dir bestimmt jemand ob das klappen würde. Und danach kannst Du es ja mal in „echt“ versuchen.

Es sei denn, das war ne eher akademische Frage, dann kannst Du den ganzen Text vergessen :stuck_out_tongue:

Cheers,
Ferdinand

hallo Hannes1606,

Der Kollege hat es schon erwähnt, daß das „Datei-Formate knacken“ nicht gerade die leichteste Übung ist.

Wenn du daher guckst, daß deine Texte als ASCII vorliegen, machst Du den Leuten das erheblich leichter…

lg
Martin

Danke schonmal für die vielen Antworten!

Aber wie gesagt ich bin ein echter Laie, also ich weiß, dass in ne html Seite zB der Befehl muss, aber dann is es auch schon vorbei. also meine Programmiersprache is eher Bahnhof als C++ oder Java oder sonstigen.
gibts denn auch seiten oder leute, die einen das von Grund auf erklären, wie sowas geht?

Das Problem ist, dass die verschiedenen Werte gleich sein könnten, dennoch zum richtigen ergebnis führen sollten.

Das ganze is für ein Game und sieht in etwa so aus:

Form: gut
Kondition: gut
Verteidigung: sehr gut
Sturm: schlecht
Wert: 478

(die Werte für gut sind übrigens 7, schlecht 4, sehr gut 8)
das ganze sollte eben dann so aussehen, dass ich den gesamten Text in ein Feld kopiere und das ganze dann als (sich fortlaufende)Liste ausgegben wird.
also in etwa so: 7 7 8 4 478
oder 7-7-8-4-478

Ist sowas möglich, bzw wie ist sowas am besten lösbar?!
Vielen Dank nochmal für eure Antworten!

Hannes

Hallo Hannes,

Aber wie gesagt ich bin ein echter Laie, also ich weiß, dass
in ne html Seite zB der Befehl muss, aber dann is
es auch schon vorbei. also meine Programmiersprache is eher
Bahnhof als C++ oder Java oder sonstigen.
gibts denn auch seiten oder leute, die einen das von Grund auf
erklären, wie sowas geht?

Na ja, das ist schon mit einer gewissen Taliba-Mentalität
verbunden - man muss schon eine Art „fanatischer Schüler“
sein, um das richtig zu lernen :wink:

Das ganze is für ein Game und sieht in etwa so aus:

(die Werte für gut sind übrigens 7, schlecht 4, sehr gut 8)
das ganze sollte eben dann so aussehen, dass ich den gesamten
Text in ein Feld kopiere und das ganze dann als (sich
fortlaufende)Liste ausgegben wird.
also in etwa so: 7 7 8 4 478

Also da ich gerne programmiere hab ich das mal
versucht. Nehmen wir mal an, Du hast den obigen
Textblock in einer Datei „gamefile.txt“:

 Form: gut
 Kondition: gut
 Verteidigung: sehr gut
 Sturm: schlecht
 Wert: 478

dann kannst Du mit folgendem Programm-
aufruf unter Win (z.B. Kommandozeile) das gewünschte
ergebnis als eine Zeile pro Datei ausgeben.
Nennen wir das Programm „Gamescan.pl“

C:\DATA> perl Gamescan.pl gamefile.txt
dann erhieltest Du die Ausgabe

 7 7 8 4 478 

Das Programm „Gamescan.pl“ (nur wenige Zeilen) müsstest
Du nur in eine Datei mit dem Namen „Gamescan.pl“ eintragen
und abspeichern.

Du kannst auch selber im Programm Änderungen
eintragen, - was Namen und Bewertungen betrifft.

Hier ist das Programm:

 my %werte = ('schlecht' =\> 4,
 'gut' =\> 7,
 'sehr gut' =\> 8,
 );
 my $suche = (join '|', keys %werte) . '|\d+';
 my @finde = qw(
 Form
 Kondition
 Verteidigung
 Sturm
 Wert
 );

 while (my $zeile = ) {
 for my $wort (@finde) {
 print map { $werte{$\_} || $\_, ' ' }
 $zeile =~ /$wort: ($suche)/g
 }
 }

Grüße

CMБ

dann kannst Du mit folgendem Programm-

aufruf unter Win (z.B. Kommandozeile) das gewünschte
ergebnis als eine Zeile pro Datei ausgeben.
Nennen wir das Programm „Gamescan.pl“

Vorausgesetzt, Perl (z. B. http://downloads.activestate.com/ActivePerl/Windows/…) ist installiert, was man unter Windows leider nicht voraussetzen kann.

Gruss
Schorsch

Ihr habt mir schon sehr geholfen, vielen Dank dafür!

Allerdings wäre ich euch sehr dankbar, wenn ihr mir dabei noch etwas
mehr helfen könntet.

habe da noch ein problem.

habe jetzt eine datei gamescan gemacht, mit den zeilen, die mir gegeben wurden:

my %werte = (‚schlecht‘ => 4,
‚gut‘ => 7,
‚sehr gut‘ => 8,
);
my $suche = (join ‚|‘, keys %werte) . ‚|\d+‘;
my @finde = qw(
Form
Kondition
Verteidigung
Sturm
Wert
);

while (my $zeile = ) {
for my $wort (@finde) {
print map { $werte{$_} || $_, ’ ’ }
$zeile =~ /$wort: ($suche)/g
}
}

allerdings weiß ich nicht, wo ich diese ausgabe herbekomme.
habe dann noch das gamefile geschrieben, allerdings weiß ich nicht so
richtig, wie ich das machen soll.

noch zwei Fragen:
ist es möglich, dass es zum beispiel ein fenster gibt, in das ich
einen kopierten text einfügen kann und mir das programm dann die
ausgabe gibt? denn sonst muss man jedes einzelne mal ja eine datei
erstellen, was etwas sehr aufwendig ist.
und ist es möglich, dass die ausgabezeilen einfach in eine liste
eingetragen werden, oder eben in ein file kommen, dass die liste immer
weiterführt?

also das perfekteste wäre es ja, wenn ich, nach dem ich den text
reinkopiert habe, einfach enter drücke (ode rgar nichts mache) und das
prog die ausgabe in eine liste schreibt. dann kommt der nächste text,
dann kommt die nächste zeile, usw.

vielen vielen dank schon mal!

ist es möglich, dass es zum beispiel ein fenster gibt, in das
ich
einen kopierten text einfügen kann und mir das programm dann
die
ausgabe gibt? denn sonst muss man jedes einzelne mal ja eine
datei
erstellen, was etwas sehr aufwendig ist.

Ganz grob ginge das folgendermassen:

# hier Variablendeklarationen einfügen

open OUT, "\>ausgabe.txt";

while ($zeile = ) {
# hier Standardverarbeitung einfügen
 if ( $zeile =~ /schluss/i ) {
 close OUT
 die "Feierabend!";
 }
}

Hier werden die Eingaben nicht aus einer Datei, sondern aus stdin geholt. Das Programm läuft in einer Endlosschleife und verarbeitet jeden Text, den du in die Eingabeaufforderung eintippst (und mit ENTER abschliesst) oder per copy&paste in die Eingabeaufforderung einkopierst.

Um das Programm sauber zu beenden, tippst du, wenn der Job erledigt ist, einfach "Schluss " ein. Damit die Datei Ausgabe.txt nicht bei jedem Aufruf des Programms überschrieben wird, sondern neue Daten angehängt werden, musst du die Zeile
open OUT, „>ausgabe.txt“;
noch durch
open OUT, „>>ausgabe.txt“;
ersetzen.

HTH
Schorsch