WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 18.05.2004, 13:58   #1
shusai
Jr. Member
 
Registriert seit: 11.01.2002
Beiträge: 29


Standard Komplizierte Textdatei in MySQL umwandeln

Ich muss dringend eine Wörterbuchdatei in MySQL umwandeln, scheitere aber an der Unregelmäßigkeit der Datei.

Ich versuche einmal, die Deutsch-Englisch-Japanisch Datei zu beschreiben:
Am Zeilenbeginn steht ein dt. Ausdruck, dann ein Trennzeichen und kein bis mehrere engl. Ausdruck, die mit (E) beginnen, dann min. ein jap Ausdruck, der mit (J) beginnt, alles immer mit dem "|" getrennt:

aaaaa|(E)bbbbb|(E)ccccc|(J)xxxxx|(J)yyyyy

Vor einiger Zeit hatte ich mit folgendem Skript Erfolg, die Quelldatei war aber eindeutig getrennt:
PHP-Code:
<?php
set_time_limit
(7200);
mysql_connect("localhost""root""");
mysql_select_db("wadoku");
$quelle file ('./wadoku.txt');

  for(
$i=0$i<sizeof($quelle); $i++) {
      
$line trim($quelle[$i]);
      
$arr explode(";"$line);

      
$sql "insert into wadoku values ('".
                  
implode("','"$arr) ."')";
      
mysql_query($sql);
      echo 
$sql ."
\n"
;
      if(
mysql_error()) {
         echo 
mysql_error() ."
\n"
;
      }
}
?>
Idealerweise sollten drei Spalten entstehen, für jede Sprache eine, die auch mehrere Ausdrücke enthalten kann.
Wie kann man soetwas lösen? Explode alleine hilft ja nicht....

Danke für eure Hilfe!
shusai ist offline   Mit Zitat antworten
Alt 18.05.2004, 14:09   #2
eAnic
Inventar
 
Benutzerbild von eAnic
 
Registriert seit: 23.01.2000
Alter: 46
Beiträge: 2.135


eAnic eine Nachricht über ICQ schicken
Standard

Importiere die Datei doch im MS Excel und formatiere sie nach den Kriterien.
____________________________________
... back in business
eAnic ist offline   Mit Zitat antworten
Alt 18.05.2004, 14:10   #3
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Am Abend gibts ein Perl-Script dafür
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 18.05.2004, 14:13   #4
shusai
Jr. Member
 
Registriert seit: 11.01.2002
Beiträge: 29


Standard

Zitat:
Original geschrieben von eAnic
Importiere die Datei doch im MS Excel und formatiere sie nach den Kriterien.
Wird ein bisserl aufwändig, habe vergessen zu sagen, dass die Datei nicht allzu klein ist, 21MB, 141.000 Zeilen...

@_m3:
Bin schon gespannt, danke!
shusai ist offline   Mit Zitat antworten
Alt 18.05.2004, 15:30   #5
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Wie schaut denn die DB aus?
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Alt 18.05.2004, 19:28   #6
shusai
Jr. Member
 
Registriert seit: 11.01.2002
Beiträge: 29


Standard

Ich dachte an eine ganz einfache Tabelle:

CREATE TABLE `tus` (
`dt` text NOT NULL,
`en` text NOT NULL,
`jp` text NOT NULL,
`np` text NOT NULL
) TYPE=MyISAM;

"np" ist zur Sicherheit, wenn etwas nicht eindeutig zugeordnet werden kann.
shusai ist offline   Mit Zitat antworten
Alt 18.05.2004, 20:48   #7
shusai
Jr. Member
 
Registriert seit: 11.01.2002
Beiträge: 29


Standard

Ich habe jetzt folgendes Skript:
PHP-Code:
<?php
 set_time_limit
(7200);
mysql_connect("localhost""root""");
mysql_select_db("tus");

$quelle=fopen("dic2.sjs","r");
  
 while(
$line=fgets($quelle)) {
$_sprache explode("|"$line);

$deutsch $_sprache[0];
unset (
$_sprache[0]);

$sql "insert into tus set deutsch = '$deutsch'";
$ins mysql_query($sql);
$lid mysql_insert_id();

foreach(
$_sprache as $begriff){

  if (
substr($begriff,3,1)=="E")
  {
    
$sql "insert into tus set ".
           
"ID = $lid,".
           
"english = '$begriff'";
    
$ins mysql_query($sql);
        echo 
"sql: $sql 
"
;
}
  elseif (
substr($begriff,3,1)=="J")
  {
    
$sql "insert into tus set ".
           
"ID = $lid,".
           
"japanisch = '$begriff'";
    
$ins mysql_query($sql);
  }
  else
  {
    
$sql "insert into tus set ".
           
"ID = $lid,".
           
"unklar = '$begriff'";
    
$ins mysql_query($sql);
  }
}


 
fclose($quelle);
?>
Die deutschen Einträge landen in der Datenbank, sonst aber nichts...
Was mache ich falsch?

Danke
shusai ist offline   Mit Zitat antworten
Alt 18.05.2004, 21:08   #8
käptn
Inventar
 
Registriert seit: 04.11.2001
Alter: 45
Beiträge: 2.150


Standard

KAnn nicht funktionieren, weil:

1.) du versuchst einen zweiten Datensatz mit derselben ID (PRIMARY KEY) anzulegen (stattdessen sollte ein update mit where verwendet werden)
PHP-Code:
UPDATE tus SET english '$english' WHERE ID $lid
2.) geht oberes auch nicht da du damit vorher eingetragene englische Wörter überschreiben würdest, und du hast geschrieben, dass es mehrere englische Begriffe pro Zeile geben kann

~
____________________________________
LOL - Mein erstes Post im Programmier Forum

MACINTOSH - Most Applications Crash, If Not The Operating System Hangs
käptn ist offline   Mit Zitat antworten
Alt 18.05.2004, 21:24   #9
shusai
Jr. Member
 
Registriert seit: 11.01.2002
Beiträge: 29


Standard

Hmmm, blöde Gschicht...

Was könntest du mir empfehlen?

Danke!
shusai ist offline   Mit Zitat antworten
Alt 18.05.2004, 21:27   #10
_m3
Inventar
 
Registriert seit: 24.09.2001
Beiträge: 7.335


Standard

Ein ordentliches DB-Design. Sorry, ist aber so.
____________________________________
Weiterhin zu finden auf http://martin.leyrer.priv.at , http://twitter.com/leyrer , http://www.debattierclub.net/ , http://www.tratschen.at/ und via Instant Messaging auf Jabber: m3 <ät> cargal.org .
_m3 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:53 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag