Suche nach Trennoperatoren '|'

Das stimmt natürlich und ist eleganter, auch mit regular expressions und pattern matching zu arbeiten wie der Admin vorgeschlagen hat ist feiner, aber die Ausgangslage ist die, das Edelfalke ist ein Programmier-Neuling ist.

Dementsprechend ist es leichter, und ich denke auch intuitiver, sich einfach ein bisschen mit einfachen linearen Operationen auf Strings der Problematik anzunähern. Damit haben wir uns doch anfangs auch rumgeschlagen oder :)

Naja, in diesem Sinne, frohes schaffen allseits. Ich werd nun erstmal zocken :suspekt:
 
Moin!
Jetzt mal ohne groß in die Materie der regulären Ausdrücke einzutauchen..
warum nicht einfach
Code:
String[] parts = yourString.split("|");
nutzen? Liefert die die Daten zwischen den einzelnen "|". Oder hab ich das Problem nicht verstanden und mache es mir zu einfach?

*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Das kann ich nicht so stehen lassen ;)

*noch-klüger-modus on*

Eigentlich sind sehr viele "Methoden" in java Operatoren, dazu auch diese, denn mathematisch betrachtet, ist ein Operator f eine Abbildung zwischen zwei Vektorräumen U,V über einem endlichen Körper K ( wenn gilt f: U --> V. Und das liegt hier vor.

*noch-klüger-modus off*


Genug von mir für heute...
 
So, danke für die Zahlreichen Hilfestellungen.

Hier mein Code, den ich bis jetzt für die Suche habe:

Code:
while ((s=r1.readLine()) !=null) {
    			sn=(s + "\n");
	
		while ((e=r2.readLine()) !=null) {
    				en=(e + "\n");

//suche nach 0|ABC-DEF| :
    		if (en.contains( " 0|ABC-DEF|")){
    			int index0 = en.indexOf("0|ABC-DEF|");
    			en = en.substring((index0)+10); //du nimmst den substring nach "0|ABC-DEF|" bis zum ende : GHI-JKL|MN_OP_QRST_BLA|........
//springe ein '|' weiter:  		
    			if (en.contains("|")){
    				int index1 = en.indexOf("|");
    				en = en.substring(index1+1); //du nimmst den substring nach dem naechsten "|" bis zum ende --> |MN_OP_QRST_BLA|..............
    				}
//springe noch ein '|' weiter:     		
    				if (en.contains("|")){  			
    					int index2 = en.indexOf("|");
    					String schreiben = en.substring(0, index2);	// Hier kommt die ID heraus, dh. 0 ist die aktuelle Position, bis Index2 = MN_OP_QRST_BLA
    					tmp.writeBytes(schreiben + " ");
    					}   		
    				}
    			}
    		}



Das File sieht so aus :

0|ABC-DEF|GHI-JKL|MN_OP_QRST_BLA|........
1|UVW|X|6|1A|YZ.....
......
......
......

In den einzelnen Felder stehen Daten, die ich benötige. Die Zeilen kommen öfters in dem File vor, jedoch mit unterschiedlichem Inhalt.



Das Ausgabefile sollte in etwa so aussehen:


1: MN_OP_QRST MN_OP_QRST MN_OP_QRST MN_OP_QRST MN_OP_QRST MN_OP_QRST MN_OP_QRST.................

dh. den Inhalt von MN_OP_QRST_BLA muss ich auslesen (was auch dank kaffee_trinken mittlerweile auch klappt), allerdings ist mir aufgefallen dass, das _BLA weg muss.
Da brauch noch einen Anstoß wie es gehen würde, meine Überlegung wäre, MN_OP_QRST_BLA einzulesen, bis zum ende springen und von dort bis zum letzten _ löschen.
Leider weiss ich aber gar nicht wie ich es realisieren könnte, da Hauptproblem ist, dass die Unterstriche nicht immer gleich an der Zahl sind, und dadurch die indexOf möglichkeit nicht funktioniert. Es wäre praktisch, eine funktion zu finden, die bis zum hinteren '|' springt und dann rückwärts bis zum '_' springt also in etwa so "MN_OP_QRST_BLA" bis ans ende von BLA springen, bis zum '_' vor dem BLA springen und dann das MN_OP_QRST kopieren.

Gruß Alex




EDIT:
Das mit _BLA hab ich einfach gelöst, indem ich das dritte mal nicht nach '|' sondern nach '_BLA' gesucht habe ;)
also ist der Punkt erledigt.
 
Zuletzt bearbeitet:
Nun hab ich ein neues Problem,
jetzt muss ich die Suche rückwärts betreiben.
D.h. in dem File, welches ich mit RandomAccessFile einlese, muss ich nach einem Begriff absuchen und bei Fund, nach einem weiteren Begriff, der im Text weiter oben steht suchen.

Beispiel:

ABCD
EFGH
QRST
IJKLK
MNOP
EFGH
QRST
UVVX
YZ
ABCD
EFGH
IJKLK
MNOP
QRST
IJKLK
UVVX
YZ

Das Programm sucht nach MNOP, bei einem Fund soll es im Text vor der Fundstelle nach EFGH suchen, wobei die Abstände immer unterschiedlich sind, d.h. es gibt keine Regelmäßigkeit was die Zeilen angeht, also muss es wirklich gesucht werden.

Zusätzlich würde ich mich über ein gutes (möglichst Deutsches) howto zu RandomAccessFile freuen.

Vielen Dank schonmal im Voraus

Gruß Alex
 
Versuch den Fiel eiach ma mit nem FileInputStream einzulesen , wie z.b.
Code:
...
while(in.readLine() != -1)
{
//in zeichen wird weiter oben eingelesen
char ch = char(zeichen);
//str ist der speicherstring
str = ch + str;
}
...
dammit kannst du den Text rückwärts einlesen und mit vollgendem code die zeichen aufschlüsseln
Code:
class StringSplitter
{
 String[] str = null;
 int a = 0;
 char ch = 0;
 String zs = "";
 
 String void(String text,String zeichen)
 {
  a = 0;
  str = new String[text.length()];
  for(int i = 0;i < text.length();i++)
   str[i] = "";
  for(int i = 0;i < text.length();i++)
  {
   ch = text.charAt(i);
   zs = "" + ch;
   if(zs.equals(zeichen))
    a++;
   else
    str[a] = str[a] + zs;
  }
 }
}
der packt alles in ein array und setzt bei jedem auffinden von zeichen den index um 1 hoch.
 
Danke pria, aber das Zeichenweise Einlesen ist leider in meinem Fall nicht sehr effektiv, besser ist es zeilenweise einzulesen (da die Sachen die ich suche, jeweils in einer Zeile stehen). Das mit FileInputStream hatte ich schonmal versucht, das hat aber an irgendwas gescheitert, ich weiss nicht ob es daran lag dass die Files wirklich groß sind bis zu 15 MB .


Mal eine andere Frage.
besteht irgendwie die Möglichkeit, ein txt File mit folgendem Trennzeichen "|" in eine Exel Tabelle zu wandeln, so dass ich dann nach bestimmten Feldern suchen muss und nicht nach Begriffen

Bzw. noch ein Gedanke wäre, es in eine Art Datenbank zu wandeln..

Bin für jede Hilfe dankbar.

Gruß Alex
 
Hi,

geht beides. In Excel kannst Du unter "Datei" "Daten importieren" Text oder CSV-Files einlesen und die Trennzeichen etc. einstellen. Du kannst Dir aber auch einen Text-ODBC Treiber einrichten "Start" "Einstellungen" "Systemsteuerung" "verwaltung" "Datenquellen (ODBC)". Ist nicht schnell, aber das File ist wie jede andere DB-Tabelle über ODBC (und damit JDBC) erreichbar.

Grüße

Jo

P.S Eine Beschreibung für das Einrichten des ODBC-Treibers findest Du hier ab Figure 7.

http://www.c-sharpcorner.com/UploadFile/mahesh/AccessTextDb12052005071306AM/AccessTextDb.aspx

Google ist voll davon
 
Zuletzt bearbeitet:
Zurück