"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[C]Ganze Wörter aus Textfile auslesen

Burschi1620 09.07.2006 - 13:39 2151 22
Posts

Luzandro

OC Addicted
Avatar
Registered: Mar 2006
Location: 2482
Posts: 708
http://www.galileocomputing.de/open...40001571F02E100

es ließe sich allerdings auch recht gut mit regulären ausdrücken rausfiltern, nur sind die am anfang wohl auch nicht so leicht zu verstehen
http://java.sun.com/j2se/1.5.0/docs...ex/Pattern.html
http://java.sun.com/j2se/1.5.0/docs...ex/Matcher.html
http://www.galileocomputing.de/open...40001561F013100

Code:
import java.util.regex.*;

public class Main { 
   public static void main(String[] args) {
	   String input = "****** PC NAME BEGIN ******\n"+
		   	"Blaa fuer PC NAME ist gestartet worden\n"+
		   	"Verbinde to PC NAME...\n"+
		   	"System information for PC NAME:\n"+
		   	"Uptime: 325446345 Tage 34343 Minuten....\n"+
		   	"Pocessors:\n"+ 
		   	"PATCHES Installed\n"+
		   	"****** PC NAME ENDE ******\n"+
		   	"****** PC NAME2 BEGIN ******\n"+
		   	"Blaa fuer PC NAME2 ist gestartet worden\n"+
		   	"Verbinde to PC NAME2...\n"+
		   	"System information for PC NAME2:\n"+
		   	"Uptime: A325446345 Tage 34343 Minuten....\n"+
		   	"Pocessors:\n"+ 
		   	"PATCHES Installed\n"+
		   	"****** PC NAME2 ENDE ******\n";
	   String beginMarker = "^\\*{6} (.*?) BEGIN \\*{6}$";
	   String endMarker = "^\\*{6} (.*?) ENDE \\*{6}$";
	   String uptime = "^Uptime: (.*?)$";
	   Pattern p = Pattern.compile(beginMarker + ".*?" + uptime + ".*?"+  endMarker, Pattern.MULTILINE | Pattern.DOTALL);
	   Matcher m = p.matcher(input);
	   while (m.find()) {
		   System.out.println("PC: "+ m.group(1));
		   System.out.println("uptime: "+ m.group(2));
		   System.out.println("====================");
	   }
   }    
}
Bearbeitet von Luzandro am 12.07.2006, 07:56

M.I.P.S.

Big d00d
Avatar
Registered: Mar 2002
Location: On the inside
Posts: 324
Also für sowas würd ich entweder Perl verwenden oder wenn unbedingt ein C-code erzeugt werden soll "flex".

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Zitat von Luzandro
und wo ist das problem? (abgesehen davon, dass dort auch innerhalb der wörter gesucht wird)
Also in Burschi's Fall hätte es schon funktionieren müssen, es kann nur ein Problem auftreten, wenn das gesuchte Wort am Ende des Puffers eingelesen wird (naja ... wenn du dir den Code anschaust siehst es eh sofort).

OnTopic: Für sowas eignet sich Java wirklich viel besser. Luzandro hat eh schon eine schöne Lösung gepostet. Wenn du die regulären Ausdrücke nicht verstehst, dann kannst du hier auch Stringoperationen verwenden, die sollten auch ausreichen.

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Also wenn das nicht grade eine Programmier-Fleiszaufgabe ist, schreit das geradezu nach `grep`.

Luzandro

OC Addicted
Avatar
Registered: Mar 2006
Location: 2482
Posts: 708
Zitat von COLOSSUS
Also wenn das nicht grade eine Programmier-Fleiszaufgabe ist, schreit das geradezu nach `grep`.

gibt grep bei einem match nicht einfach die ganze zeile aus? mit awk sollte es gehen

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25423
ich frag mich nur warum dieser thread schon 20 posts hat. die aufgabe ist in so gut wie jeder (skript) sprache mit file io in kürze lösbar :)

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Zitat von Luzandro
gibt grep bei einem match nicht einfach die ganze zeile aus? mit awk sollte es gehen

`grep -o` hilft.

pong

Addicted
Avatar
Registered: Oct 2001
Location: Wien (ned im Kra..
Posts: 414
Zitat
also ich wüsste jetzt nicht wie ich das einfacher anstellen könnte. Abgesehen davon wäre das dann ein array mit 1 Million zeichen *g*

Und? Da du es ja sowieso nicht interaktiv bearbeitest, wirst du - worst case - die 5 Minuten verkraften können die der schwächliche PC braucht um das File abarbeiten zu können.

Bei deinem Anwedungsgebiet - satzweise Verarbeitung - würde ich mir aber einfach einen freien Cobol Compiler nehmen und ein einfaches Filematching anwenden, wären - schätzungsweise - max. 100 Zeilen Code

pong
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz