Datei durchsuchen
DerDieDas
- perl
Hallo,
passen zu meinem Thema "Datei-Verzeichnis vergleich" hätte ich eine frage - die ich eigentlich wissen müsste aber einfach nicht drauf komme.
Folgendes:
Ich möchte eine Userliste machen - Alle "Anmeldungen" in einer Datei speichern also zum beispiel:
Name, Alter, Wohnort
Name, Alter, Wohnort
Name, Alter, Wohnort
usw.
Das möchte ich in eine .txt Datei schreiben (vorerst).
Jetzt möchte ich das man per Eingabe nach dem Nick suchen kann und dann der Name, Alter, Wohnort ausgegeben wird.
Wie realisiere ich das?
Erstmal möchte ich es lokal auf meinem rechner ausprobieren deshalb solltet ihr bei einer Antwort darauf achten das es sich um einen reinen Perl-Code handelt und keinen CGI ;)
Lieben Dank.
Hallo erneut,
mir ist da etwas eingefallen und zwar betrachtet mal folgenden Code (ungetestet):
################################################
#!/usr/bin/perl -w
use strict;
print "Suchwort: ";
my $suchwort = <STDIN>;
chomp $suchwort;
open (FH, "<datei.txt");
my @liste = <FH>;
print grep/$suchwort/i, @ausgabe;
close FH;
################################################
Ich müsste natürlich erst die grep-ausgabe wo speichern sie in ein Array setzen und dann zeilenweise auslesen lassen - wie ich des mach weiss ich noch nicht.
Wäre das eine funktionierende Idee oder gibt es da was besseres/sicheres?
mir ist da etwas eingefallen und zwar betrachtet mal folgenden Code (ungetestet):
Warum schreibst Du den Code nicht in eine Datei und testest es zumindest einmal?
Anyway, der logische Ablauf ist folgender:
my @tuple = split(/,/,$_);
- Die Elemente des Arrays ggf. trimmen und weiterverarbeiten; z.B. ausgeben
Das kannst Du jetzt glaube ich selbst in Perl formulieren.
Grüsse
"Solkar"
Hallo,
Warum schreibst Du den Code nicht in eine Datei und testest es zumindest einmal?
=> Habe ich, nur habe ich den getesten Code nicht kopiert da ich ihn schon löschte - ich fragte ja ob das eine "gute" Lösung ist oder ob es noch bessere wege dazu gibt.
Hallo,
Warum schreibst Du den Code nicht in eine Datei und testest es zumindest einmal?
=> Habe ich, nur habe ich den getesten Code nicht kopiert da ich ihn schon löschte
???
Aber egal...
- Zeilen daraus lesen bis eine Zeile die Eingabe, also den gesuchten Nickname, enthält
=> Das ist mein Problem - bei mir will es nicht klappen. Ich müsste es eigentlich wissen aber ich find einfach keine passende lösung im moment. Ein kleiner anstoss würd mir schon genügen.
# [...]
#
# "Merker" fuer den jeweils naechsten Schleifendurchlauf
#
my $has_vals = 0;
while(<FILE>) {
if ($has_vals) {
my @tuple = split(/,/,$_);
#
# trimmen und verarbeiten
#
last;
}
#
# Prüfen auf getrimmten nickname
# in $nick
#
if ($_ =~ /^### *$nick/i) {
$has_vals = 1;
next;
}
}
# [...]
Vielen Dank das hat mir sehr geholfen.
Ich hab mir nun ein etwas anderes "Programm" geschrieben. Ich habe die Ausgabe nicht in der Schleife haben wollen.
Klappt alles gut, nur eines:
Meine Liste besteht jetzt aus Namen das sieht in etwa so aus:
derdiedas,vorname,wohnort
keineahnung,vorname,wohnort
jemandanders,vorname,wohnort
usw.
Mein "Programm" ist eigentlich recht gut (find ich). Nur hab ich ein Problem, es durchsucht nicht bis zur nächsten Zeile. Also immer nur die erste Zeile. Würde es aber so stehen:
derdiedas,vorname,wohnortkeineahnung,vorname,wohnortjemandanders,vorname,wohnort
Liest es perfekt aus.
Bei dem oben genannten Skript (von solkar) ist es bei mir das gleiche. Wie kann ich das Problem lösen? Ich möchte übersichtlichkeitshalber eine Liste untereinander führen.
Meine Liste besteht jetzt aus Namen das sieht in etwa so aus:
So ist's besser, denke ich.
Mein "Programm" ist eigentlich recht gut (find ich). Nur hab ich ein Problem, es durchsucht nicht bis zur nächsten Zeile. Also immer nur die erste Zeile.
Ohne Programmcode kann man Dir leider nicht helfen.
Siechfred
Wäre das eine funktionierende Idee oder gibt es da was besseres/sicheres?
Falls Deine Textdatei tatsächlich in solchen Blöcken aufgebaut ist, wie Du sie beschrieben hast, halte ich das nicht für gut. Du solltest nach dem Schema 1 User + Userinfos = 1 Datensatz = 1 Zeile arbeiten, das macht Dir die Verarbeitung der Daten später ungemein leichter (siehe Code von "solkar").
Ansonsten solltest Du für die Verarbeitung Deiner Datei unbedingt einen Blick auf Tie::File werfen.
Siechfred
passen zu meinem Thema "Datei-Verzeichnis vergleich" hätte ich eine frage
Warum bist du dann nicht im alten Thread geblieben?
Das möchte ich in eine .txt Datei schreiben (vorerst).
Jetzt möchte ich das man per Eingabe nach dem Nick suchen kann und dann der Name, Alter, Wohnort ausgegeben wird.Wie realisiere ich das?
https://forum.selfhtml.org/?t=174996&m=1149741
dir wurde in diesem Thread schon geraten eine Datenbank zu verwenden. Die einfachste ist DB_File, aber glaub mir du wirst schnell merken dass du damit nicht weit kommst und dir eine richtige Datenbank wünschen.
Struppi.
Die einfachste ist DB_File, aber glaub mir du »» wirst schnell merken dass du damit nicht weit kommst und dir eine richtige »» Datenbank wünschen.
Struppi.
Stimmt.
Da schlag ich glatt mal das
DBI ;) mit DBD::SQlite
vor.
SQLite ünterstützt zwar nicht referentielle Integrität (toleriert aber die Syntax), aber DBD::SQLite soll ->konfigurationsfrei<- sein - ich weiss nicht mehr ob ich irgendwelchen Aufwand getrieben habe um es unter ActivePerl/WinXP zum Laufen zu kriegen, aber ich glaub nicht.
Zumindest läuft DBD::SQLite schnell und stabil.