![]() |
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 ![]() Ich bekomme sowas in der Art von der Seite: Zitat:
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 |
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
Zitat:
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. |
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
Erstmahl danke für deine schnelle antwort.
Aber: wie liest man einen wert danach aus? gruß Teekeks |
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
hoi,
den wert kannst du über die zeilennummer auslesen bsp:
Delphi-Quellcode:
cya
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; |
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.
|
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 |
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
was ich noch nicht versteh ist:
wen ich das hier als code hab:
Delphi-Quellcode:
Danm wird nur der Titel eingelesen... WARUM??
//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. |
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
Wie schaut es denn aus wenn Du alles in einer Schleife abfragst?
Delphi-Quellcode:
E_ISBN.Text ist das eine Editfeld?
//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. Das wird bei jedem neuen Fund von ISBN überschrieben. Grüße Klaus |
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
hmmm... immernoch das selbe :cry: es wird nur der titel eingetragen...
weis jemand woran das liegen mag? |
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 |
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
Groß- und Kleinschreibung sind identisch?
|
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 |
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
Zitat:
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. |
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:
wen jemand einen Fehler findet ist er besser als ich (seit ihr sowieso alle ^^ )
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; gruß Teekeks |
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
allso es ist so das wen ich von hand folgendes eingebe:
Zitat:
Zitat:
|
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; |
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:
vorher mache wird das nichts... trotz alledem danke
trim(M_Import.text);
gruß Teekeks |
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.
|
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...
|
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.
|
Re: Einlesen aus Memo in Editfelder. [Bibliotheksverwaltung]
UNIX ist doch richtig da ich mein Lazarus auf Linux habe...
|
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.
|
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? |
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).
|
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:
weil: Das Memo hat nämlich ein Problem mit umlauten wie 'Ä'(wie beim Titel) und alles danachfolgende wurde wie folgend automatisch geändert:
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); aus Zitat:
Zitat:
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 |
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
|
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