Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung] (https://www.delphipraxis.net/123071-einlesen-aus-memo-editfelder-%5Bbibliotheksverwaltung%5D.html)

Teekeks 27. Okt 2008 08:06


Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Hi!
Ich arbeite an einer Bibliotheksverwaltung für meine Schule und dabei ist mir eine Frage in den Weg gekommen:
Es soll so eine Art Import von der Seite http://d-nb.de wo solche Sachen wie Titel und Autor des Buches in mein Prog übertragen werden soll.
Ich bekomme sowas in der Art von der Seite:
Zitat:

Link zu dieser Seite: http://d-nb.info/990813231
Titel: Von PHP bis my SQL : Dynamische Webseiten und Datenbanken - Kompakt und verständlich erklärt von Anfang an / Marco Franzbonenkamp
Verfasser: Franzbonenkamp, Marco
Ausgabe: 1. Aufl.
Verleger: Herzogenrath : Shaker Media
Erscheinungsjahr: 2008
Umfang/Format: 160 S. ; 210 mm x 148 mm
ISBN: 978-3-86858-118-8
Einband/Preis: Pb. : sfr 33.80 (freier Pr.), EUR 16.90, EUR 16.90 (AT)
Sachgruppe: 004 Informatik
Erscheinungstermin: Oktober 2008
Das soll dann in ein Memo kopiert werden (von Hand) und dann auf einen Buttonklick in Editfelder übertragen werden.
Mein Problem ist folgendes: Wie kann ich jetzt Programmgesteuert zu z.B. "ISBN: " springen und alles nachfolgende dort eintragen?

schon mahl danke für die Antworten.
Teekeks

p.s. achso eins noch: Ich Programmiere mit Lazarus und Linux

toyoman 27. Okt 2008 09:41

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Zitat:

Zitat von Teekeks
Hi!
Ich arbeite an einer Bibliotheksverwaltung für meine Schule und dabei sind mir eine Frage in den weg gekommen:
Es soll so eine art Import von der seite http://d-nb.de wo sone sachen wie Titel und Autor des Buches in mein Prog übertragen werden soll.
ich bekomme sowas in der art von der Seite:
Zitat:

Link zu dieser Seite: http://d-nb.info/990813231
Titel: Von PHP bis my SQL : Dynamische Webseiten und Datenbanken - Kompakt und verständlich erklärt von Anfang an / Marco Franzbonenkamp
Verfasser: Franzbonenkamp, Marco
Ausgabe: 1. Aufl.
Verleger: Herzogenrath : Shaker Media
Erscheinungsjahr: 2008
Umfang/Format: 160 S. ; 210 mm x 148 mm
ISBN: 978-3-86858-118-8
Einband/Preis: Pb. : sfr 33.80 (freier Pr.), EUR 16.90, EUR 16.90 (AT)
Sachgruppe: 004 Informatik
Erscheinungstermin: Oktober 2008
Das soll dan in ein Memo kopiert werden (von Hand) und dann auf einen Buttonklick in Editfelder übertragen werden.
Mein Problem ist folgendes: Wie kann ich jetzt Programmgesteuert zu z.B. "ISBN: " springen und alles nachfolgende dort eintragen?

schon mahl danke für die Antworten.
Teekeks

p.s. achso eins noch: Ich Programmiere mit Lazarus

hi, du könntest z.b. Pos verwenden um nach ISBN zu suchen. Dann kannst du mit den Copy-Befehl den Wert nach ISBN auslesen und in dein Edit Feld kopieren. Problem dabei ist natürlich immer: Das ganze muss immer in der gleichen Form daher kommen. Also nicht dass das plötzlich ISBN irgendwas: Nummer heisst. Weil du bist ja auf die korrekte Position der Strings angewiesen.

Delphi syntax:

function Pos(Substr: string; S: string): Integer;

Description

In Delphi, Pos searches for a substring, Substr, in a string, S. Substr and S are string-type expressions.

Pos searches for Substr within S and returns an integer value that is the index of the first character of Substr within S. Pos is case-sensitive. If Substr is not found, Pos returns zero.

The PosEx function is similar to Pos, but provides additional features and can be used in C++ code.

Teekeks 27. Okt 2008 11:40

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Erstmahl danke für deine schnelle antwort.
Aber: wie liest man einen wert danach aus?
gruß
Teekeks

soulies 27. Okt 2008 12:05

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
hoi,

den wert kannst du über die zeilennummer auslesen

bsp:
Delphi-Quellcode:
var
   i : Integer ;
begin
   for i:=0 to Memo1.Lines.Count-1 do
   begin
     if (Pos('ISBN',Memo1.Lines.Strings[i])>0) then
        Edit.Text := StringReplace(Memo1.Lines.Strings[i],'ISBN: ', EmptyStr,[rfReplaceAll]) ;
   end;
end;
cya

DeddyH 27. Okt 2008 12:13

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Und wenn das Suchwort nur am Stringanfang vorkommen darf, schaust Du, ob Pos 1 zurückgibt oder verwendest die Funktionen AnsiStartsStr oder AnsiStartsText aus der Unit StrUtils.

Teekeks 27. Okt 2008 12:30

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
und nochmahls danke!
Ich versuch jetz mahl daraus schlau zu werden, aber ich glaub ich habs fast ^^

ich probiere mahl...

gruß Teekeks

Teekeks 27. Okt 2008 12:45

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
was ich noch nicht versteh ist:
wen ich das hier als code hab:
Delphi-Quellcode:
 //Daten einlesen
 //ISBN einlesen...
     for xx:=0 to M_Import.Lines.Count-1 do
     begin
       if (Pos('ISBN',M_Import.Lines.Strings[xx])>0) then
        E_ISBN.Text := StringReplace(M_Import.Lines.Strings[xx],'ISBN: ', EmptyStr,[rfReplaceAll]) ;   //mal gucken was das macht...(von DB!)
     end;                                                                                              //funkt!!! supper!
 //ISBN ist da!
 //Titel einlesen...
     for xx:=0 to M_Import.Lines.Count-1 do
     begin
       if (Pos('Titel',M_Import.Lines.Strings[xx])>0) then
        E_Titel.Text := StringReplace(M_Import.Lines.Strings[xx],'Titel: ', EmptyStr,[rfReplaceAll]) ; //das hier wird eingetragen alles andere nich :-(
     end;
 //Titel ist auch da!
 //Verfasser...
     for xx:=0 to M_Import.Lines.Count-1 do
     begin
       if (Pos('Verfasser',M_Import.Lines.Strings[xx])>0) then
        E_Verfasser.Text := StringReplace(M_Import.Lines.Strings[xx],'Verfasser: ', EmptyStr,[rfReplaceAll]) ;
     end;

 //Verfasser auch vorhanden.
Danm wird nur der Titel eingelesen... WARUM??

Klaus01 27. Okt 2008 13:00

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Wie schaut es denn aus wenn Du alles in einer Schleife abfragst?

Delphi-Quellcode:
//Daten einlesen
//ISBN einlesen...
     for xx:=0 to M_Import.Lines.Count-1 do
     begin
       if (Pos('ISBN',M_Import.Lines.Strings[xx])>0) then
         E_ISBN.Text := StringReplace(M_Import.Lines.Strings[xx],'ISBN: ', EmptyStr,[rfReplaceAll]) ;
       if (Pos('Titel',M_Import.Lines.Strings[xx])>0) then
         E_Titel.Text := StringReplace(M_Import.Lines.Strings[xx],'Titel: ', EmptyStr,[rfReplaceAll]) ;
       if (Pos('Verfasser',M_Import.Lines.Strings[xx])>0) then
         E_Verfasser.Text := StringReplace(M_Import.Lines.Strings[xx],'Verfasser: ', EmptyStr,[rfReplaceAll]) ;
     end;

//Verfasser auch vorhanden.
E_ISBN.Text ist das eine Editfeld?
Das wird bei jedem neuen Fund von ISBN überschrieben.


Grüße
Klaus

Teekeks 27. Okt 2008 13:10

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
hmmm... immernoch das selbe :cry: es wird nur der titel eingetragen...
weis jemand woran das liegen mag?

soulies 27. Okt 2008 13:18

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
also ich glaube nicht das das am auslesen liegt ...

Werden die TEdit's zur Laufzeit gesperrt bzw. machst du nach dem auslesen noch was mit den TEdit's ?

Vllt. zeigts du noch ein wenig mehr CODE für uns.


cya

DeddyH 27. Okt 2008 13:19

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Groß- und Kleinschreibung sind identisch?

Klaus01 27. Okt 2008 13:21

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
..also, ich habe ein TMemo auf der Form und 3 Editfelder
Deinen Text aus dem 1 Posting paste ich in das Memofeld und lasse
den obigen Code darüberlaufen.
In den 3 Editfelder werden ISBN, Titel und Verfasser eingetragen.

Nun liegt es an Dir zu zeigen was bei Dir anders ist.

Grüße
Klaus

Luckie 27. Okt 2008 13:25

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Zitat:

Zitat von toyoman
hi, du könntest z.b. Pos verwenden um nach ISBN zu suchen.

Und wenn der Buchtitel "ISBN für Dummies" heißt?

Hat die Seite eventuell eine Schnittstelle vorgesehen? Wenn nicht, frage ich mich, ob das von der Seite gewünscht ist, dass man deren Informationen nutzt. Letztendlich steckt ja Arbeit und zeit dadrin und ich weiß nicht, ob das denen so recht ist, wenn man sich da einfach so bedient.

Teekeks 27. Okt 2008 14:43

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
@Luckie:es wäre komisch und nicht mit dem sinn dieser Bibliothek übereistimmend wen man sich von der Deutschen Nationalbibliothek keine infos holen dürfte...

@DeddyH: ja sind.
@soulies: also: hier ist noch n bissl code...
Delphi-Quellcode:
procedure TForm4.ImportBClick(Sender: TObject);
var s_pfad:string;
    xx:integer;
begin
 s_pfad:=GetCurrentDir;
 if M_Import.ReadOnly=true then
 begin
   M_Import.ReadOnly:=false;
   M_Import.Clear;
   EreignissM.Lines.Add('Datenimport wurde aktiviert.');
 end else
   begin
 //Daten einlesen
 //ISBN einlesen...
     for xx:=0 to M_Import.Lines.Count-1 do
     begin
       if (Pos('ISBN',M_Import.Lines.Strings[xx])>0) then
         E_ISBN.Text := StringReplace(M_Import.Lines.Strings[xx],'ISBN: ', EmptyStr,[rfReplaceAll]) ;
       if (Pos('Titel',M_Import.Lines.Strings[xx])>0) then
         E_Titel.Text := StringReplace(M_Import.Lines.Strings[xx],'Titel: ', EmptyStr,[rfReplaceAll]) ;
       if (Pos('Verfasser',M_Import.Lines.Strings[xx])>0) then
         E_Verfasser.Text := StringReplace(M_Import.Lines.Strings[xx],'Verfasser: ', EmptyStr,[rfReplaceAll]) ;
     end;
{     for xx:=0 to M_Import.Lines.Count-1 do
     begin
       if (Pos('ISBN',M_Import.Lines.Strings[xx])>0) then
        E_ISBN.Text := StringReplace(M_Import.Lines.Strings[xx],'ISBN: ', EmptyStr,[rfReplaceAll]) ;   //mal gucken was das macht...(von DB!)                                                                                             //funkt!!! supper!
 //ISBN ist da!
 //Titel einlesen...
       if (Pos('Titel',M_Import.Lines.Strings[xx])>0) then
        E_Titel.Caption := StringReplace(M_Import.Lines.Strings[xx],'Titel: ', EmptyStr,[rfReplaceAll]) ;
 //Titel ist auch da!
 //Verfasser...
       if (Pos('Verfasser',M_Import.Lines.Strings[xx])>0) then
        E_Verfasser.Text := StringReplace(M_Import.Lines.Strings[xx],'Verfasser: ', EmptyStr,[rfReplaceAll]) ;
     end; }
 //Verfasser auch vorhanden.
 //\Daten Einlesen
 //Mitteilung schreiben
   EreignissM.Lines.Add('Buch erfolgreich eingetragen!');
 //\Mitteilung schreiben
 //ursprung herstellen + Hilfe Laden
   M_Import.ReadOnly:=true;
   M_Import.Clear;
   Assignfile(F,s_pfad+Form1.s_PathDelimiter+'Dokumente'+Form1.s_PathDelimiter+'Hilfe'+Form1.s_PathDelimiter+'Import.txt');
   Reset(F);
   while not eof(F) do begin
     Readln(F, S);
     M_Import.Lines.add(S);
   end;
   if (IOResult<>0) then begin M_Import.lines.add('Dateizugriffsfehler!'); M_Import.Lines.Add('Hilfe konnte nicht geladen werden!'); end else
   EreignissM.Lines.Add('Datenimport wurde deaktiviert.');
   CloseFile(F);
   //\ursprung herstellen + Hilfe Laden
 end;
end;
wen jemand einen Fehler findet ist er besser als ich (seit ihr sowieso alle ^^ )
gruß Teekeks

Teekeks 27. Okt 2008 17:10

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
allso es ist so das wen ich von hand folgendes eingebe:
Zitat:

Titel: test1
ISBN: test2
Verfasser: test3
dann wird alles richtig eingetragen, wen jedoch man das hier reinkopiert:
Zitat:

Link zu dieser Seite: http://d-nb.info/990813231
Titel: Von PHP bis my SQL : Dynamische Webseiten und Datenbanken - Kompakt und verständlich erklärt von Anfang an / Marco Franzbonenkamp
Verfasser: Franzbonenkamp, Marco
Ausgabe: 1. Aufl.
Verleger: Herzogenrath : Shaker Media
Erscheinungsjahr: 2008
Umfang/Format: 160 S. ; 210 mm x 148 mm
ISBN: 978-3-86858-118-8
Einband/Preis: Pb. : sfr 33.80 (freier Pr.), EUR 16.90, EUR 16.90 (AT)
Sachgruppe: 004 Informatik
Erscheinungstermin: Oktober 2008
dann wird nur der Titel eingetragen... ich bin rahtlos.....

DeddyH 27. Okt 2008 17:18

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Evtl. sind da noch nicht sichtbare Zeichen im Spiel.
Delphi-Quellcode:
for xx:=0 to M_Import.Lines.Count-1 do
     begin
       if (Pos('ISBN',trim(M_Import.Lines[xx]))=1) then
         E_ISBN.Text := StringReplace(M_Import.Lines.Strings[xx],'ISBN: ', EmptyStr,[rfReplaceAll]) ;
       if (Pos('Titel',trim(M_Import.Lines[xx]))=1) then
         E_Titel.Text := StringReplace(M_Import.Lines.Strings[xx],'Titel: ', EmptyStr,[rfReplaceAll]) ;
       if (Pos('Verfasser',trim(M_Import.Lines[xx]))=1) then
         E_Verfasser.Text := StringReplace(M_Import.Lines.Strings[xx],'Verfasser: ', EmptyStr,[rfReplaceAll]) ;
     end;

Teekeks 27. Okt 2008 18:03

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Hi DeddyH!
hab ich mal ausprobiert aber fukt immernoch nicht mit dem eingefürgten (nur Titel wird eingetragen)
auch wen ich
Delphi-Quellcode:
trim(M_Import.text);
vorher mache wird das nichts... trotz alledem danke

gruß Teekeks

DeddyH 27. Okt 2008 18:06

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Speicher den Inhalt des Memos doch mal in eine Datei und häng die an, an irgendwas muss es ja liegen.

Teekeks 27. Okt 2008 18:37

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab jetz einfach den inhalt von M_Import mal in ne *.txt gehauen...

DeddyH 27. Okt 2008 18:45

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Bei mir funktioniert es. Allerdings sind die Zeilenumbrüche in der Datei im UNIX-Format, also nur LF statt CRLF, evtl. liegt es daran.

Teekeks 27. Okt 2008 18:46

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
UNIX ist doch richtig da ich mein Lazarus auf Linux habe...

DeddyH 27. Okt 2008 19:02

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Ich habe es gerade unter Debian mit Lazarus 0.9.24 versucht und es funktioniert. Nun bin ich ratlos.

Teekeks 27. Okt 2008 19:10

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
da sind wir schon 2...
Könte es evtl. daran ligen das ich
1. E_Titel erzeugt habe dann
2. das Kopiert und Eingefügt habe und dann den Namen geändert habe?

DeddyH 27. Okt 2008 19:13

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Welchen Namen? Den der Komponente? Wenn die beiden übereinstimmen, sollte es keine Probleme geben, ansonsten würde der Compiler einen unbekannten Bezeichner anmeckern (zumindest bei Delphi).

Teekeks 27. Okt 2008 20:13

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Ach ist jetzt auch egal. Ich habe nämlich den Fehler gefunden! (um genau zusein mein Vater :wink: )
jetzt sieht der Code so aus:
Delphi-Quellcode:
   data:=M_import.Text;
  AssignFile(F1,'/home/peter/Lazarusprojekte/Bibliothek/Data/import.txt');
  {$i-}
  Rewrite(F1);
  {$I+}
  if (IOResult<>0) then ShowMessage('Dateizugriffsfehler!')
  else begin
    WriteLn(F1,data);
    CloseFile(F1);
  end;
  M_Import.Clear;
  Reset(F1);
  while not eof(F1) do begin
    Readln(F1, s1);
    if (Pos('ISBN',s1)>0) then
      E_ISBN.Text := StringReplace(s1,'ISBN: ', EmptyStr,[rfReplaceAll]) ;
    if (Pos('Titel',s1)>0) then
      E_Titel.Text := StringReplace(s1,'Titel: ', EmptyStr,[rfReplaceAll]) ;
    if (Pos('Verfasser',s1)>0) then
      E_Verfasser.Text := StringReplace(s1,'Verfasser: ', EmptyStr,[rfReplaceAll]) ;
  end;
  if (IOResult<>0) then ShowMessage ('Dateizugriffsfehler!');
  CloseFile(F1);
weil: Das Memo hat nämlich ein Problem mit umlauten wie 'Ä'(wie beim Titel) und alles danachfolgende wurde wie folgend automatisch geändert:
aus
Zitat:

'Verfasser: Franzbonenkamp, Marco
Ausgabe: 1. Aufl.'
wurde
Zitat:

'rfasser: Franzbonenkamp, Marco'+#10+'A'
'sgabe: 1. Aufl.'+#10+'V'
Deswegen konnte er ISBN und so nicht finden^^
Aus diesem grund speichere ich das ganze einfach in ner *.txt und lese das ganze danach zeile für Zeile wieder ein.
Ich finde das das dann auch leichter verständlich ist.

Also: DANKE für eure Hilfe (speziell dir DeddyH :wink: )
Mein problem ist gelößt!!

gruß Teekeks

christian_u 28. Okt 2008 12:47

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Das memo hat kein problem mit umlauten, dein Linux benutzt UTF-8 du musst also wenn du copy, pos verwenden willst das ganze vorher nach ansi konvertieren. Oder du nimmst UTF8Copy, UTF8Pos damit ist das ganze dann auch wirklich Unicodetauglich

Teekeks 28. Okt 2008 14:39

Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
 
Hi cristian_u!
Natürlich könnte ich das machen aber ich finde das so eigendlich ganz gut da das Programm ja später unter einem neueren Windows laufen soll.

Das kann gut sein das das an meinem Linux liegen da es eine Suse 9.1 ist und damit etwas älterem Baujahres ist ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz