WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Komplizierte Textdatei in MySQL umwandeln (http://www.wcm.at/forum/showthread.php?t=134615)

shusai 18.05.2004 13:58

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!

eAnic 18.05.2004 14:09

Importiere die Datei doch im MS Excel und formatiere sie nach den Kriterien.

_m3 18.05.2004 14:10

Am Abend gibts ein Perl-Script dafür :D

shusai 18.05.2004 14:13

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!

_m3 18.05.2004 15:30

Wie schaut denn die DB aus?

shusai 18.05.2004 19:28

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 18.05.2004 20:48

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

käptn 18.05.2004 21:08

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

~

shusai 18.05.2004 21:24

Hmmm, blöde Gschicht...

Was könntest du mir empfehlen?

Danke!

_m3 18.05.2004 21:27

Ein ordentliches DB-Design. Sorry, ist aber so.


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:36 Uhr.

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