Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Zeilenumbruch aus TXT-File übernehmen in eingefügten Bereich

Mitglied: ahstax

ahstax (Level 2) - Jetzt verbinden

28.09.2011 um 14:57 Uhr, 4319 Aufrufe, 7 Kommentare

Aus einer TXT-Datei (*.ini) soll ein Vorlagen-Text einschließlich Zeilenumbrüche usw entnommen und in eine neue E-Mail eingefügt werden.

Hallo miteinander,

wie das Vorwort schon vermuten lässt, möchte ich gerne aus einer TXT-Datei, die als ini-Datei vorliegt, einen Text entnehmen. Der Text soll als Vorlage dienen und formatiert sein. Die Formatierung soll zumindest Zeilenumbrüche umfassen.

Mit meinem Code kann ich bis jetzt zeilenweise dem TXT-File entnehmen. Der Code sieht folgendermaßen aus:

NachrichtenTextErstellen

01.
Sub NachrichtenTextErstellen() 
02.
     
03.
        BestMailTextDATEI = "\\SERVER\....\LB_MailText.ini" 
04.
        Set objMailNeu = objOlApp.CreateItem(olMailItem) 
05.
 
06.
            myMsgtext = _ 
07.
                fktGetINI(BestMailTextDATEI, "MAIL_DE", "Text01") 
08.
             
09.
            myMsgtext = myMsgtext & fktGetINI(BestMailTextDATEI, "MAIL_DE", "Text02") 
10.
     
11.
            With objMailNeu 
12.
                .BodyFormat = olFormatPlain 
13.
                .To = "Empf@enger.de" 
14.
                .Subject = "Betreff" 
15.
                .Body = myMsgtext 
16.
                .Display 
17.
            End With 
18.
 
19.
End Sub


Funktion fktGetIni

01.
  
02.
Function fktGetINI(Dateiname As String, DieSektion _ 
03.
                As String, DerEintrag As String) As Variant 
04.
                 
05.
                Temp$ = String(ZeichenZahl, 0) 
06.
 
07.
                X = GetPrivateProfileString(DieSektion, _ 
08.
                    DerEintrag, "", Temp$, 255, Dateiname) 
09.
                Temp$ = Left$(Temp$, X) 
10.
                fktGetINI = Temp$ 
11.
                 
12.
End Function


Inhalt LB_MailText.ini

01.
  
02.
[MAIL_DE] 
03.
Text01=	Text1Zeile1 **HIER ZEILENUMBRUCH** 
04.
	text1Zeile2 
05.
Text02=	Text2



Ob da vielleicht jemand einen Lösungsansatz weiß...?

Danke schon jetzt für Antworten und Hinweise.

Grüße,
Andreas
Mitglied: rubberman
28.09.2011 um 19:50 Uhr
Hallo ahstax.

Du hast eigentlich schon Glück, dass GetPrivateProfileString deine INI nicht als malformed zurückweist. Diese API parst natürlich zeilenweise, sodass text1Zeile2 eher als neuer Eintrag interpretiert wird (wenn nicht sogar gänzlich verworfen).
Entweder du bastelst dir deine eigene Funktion um solche nicht standardgerechte INI Dateien zu verarbeiten, oder du nutzt Zeichen/Zeichenkombinationen (zB. \n), die du nach dem Auslesen durch einen Zeilenumbruch ersetzt.

Grüße
rubberman
Bitte warten ..
Mitglied: ahstax
29.09.2011 um 08:27 Uhr
Erstmal guten Morgen rubberman und Danke für Deine Antwort.

Der Vollständigkeit halber, muss ich eingestehen, dass ich an und für sich von Programmieren allerhöchstens unterdurchschnittlich Ahnung habe und eher ein "Copy-Patse"-Programmierer bin als dass ich wüsste, was exakt genau passiert... Entsprechend war mir nicht klar, dass die GetPrivateProfileString nur dafür vorgesehen ist, zeilenweise auszulesen.

Was mit der von mir eingefügten ini tatsächlich passiert ist, dass text1Zeile2 tatsächlich schlicht nicht ausgelesen, zumindest nicht ausgegeben wird.

Der Ansatz mit "\n" könnte tatsächlich eine gangbare Lösung sein. Wie verhält sich denn die GetPrivateProfileString, wenn in der ini-Datei Text durch fortlaufende Eingabe länger als eine Zeile wird? Interessiert die dann auch nur eine Zeile?

Gibt es eine "fertige" Alternative zu GetPrivateProfileString?

Grüße,
Andreas
Bitte warten ..
Mitglied: rubberman
29.09.2011 um 22:35 Uhr
Hallo ahstax.

Zitat von ahstax:
Der Ansatz mit "\n" könnte tatsächlich eine gangbare Lösung sein. Wie verhält sich denn die GetPrivateProfileString, wenn in der ini-Datei Text durch fortlaufende Eingabe länger als eine Zeile wird? Interessiert die dann auch nur eine Zeile?

Ich weiß ehrlich gesagt nicht, ob es eine Maximallänge für einen Wert in einer INI gibt, bis zu der GetPrivateProfileString in der Lage ist das Ganze noch zu verarbeiten.
Zum Einen wird es aber auf die Buffergröße ankommen, die du der Funktion übergibst (Temp$), dann hast du bereits durch die Bufferlänge 255 eine Grenze gesetzt und zuletzt wird dich der Variablentyp begrenzen, in den du einliest. Dieser dürfte (falls nicht explicit deklariert) on the fly zum String gecastet werden, von dem das MSDN sagt, dass er ca. 2 Mrd. Zeichen aufnehmen kann.
Eine Zeile ist übrigens eine Zeile. Dass der eine oder andere Texteditor die Zeilen für die Ansicht umbricht, um das Ganze lesbar zu halten, hat damit nichts zu tun. In einem HEX Editor wirst du einen Zeilenumbruch unter Windows an der Zeichenfolge 0D (Wagenrücklauf) und 0A (Zeilenvorschub) erkennen.


Zitat von ahstax:
Gibt es eine "fertige" Alternative zu GetPrivateProfileString?

Nein, die gibt es für diese Art von nichtstandardgerechten Zeilen einer INI Datei nicht. Es gibt verschiedene Workarounds für VBScript, aber auch nur deshalb weil API Aufrufe für VBS nicht zur Verfügung stehen.

Um auf die Verwendung einer Zeichenfolge, wie \n zurückzukommen:
Teste mal mit
01.
' ... 
02.
X = GetPrivateProfileString(DieSektion, DerEintrag, "", Temp$, 255, Dateiname) 
03.
Temp$ = Replace(Temp$, "\n", vbCrLf) 
04.
' ...
in der Funktion fktGetINI, sowie entsprechend
Text01=Text1Zeile1\ntext1Zeile2 
in der INI.

Grüße
rubberman
Bitte warten ..
Mitglied: ahstax
30.09.2011 um 08:30 Uhr
Schönen guten Morgen,

das werde ich in jedem Fall machen!

Ich habe noch irgendwo im überfliegen mal gelesen, dass man TXT-Files "öffnen" können, um deren Inhalt "komplett" auszulesen? Geht das? Ich glaube, da danach schau ich zusätzlich mal und würde mich hierzu ggf nochmal melden, wenn das OK wäre...

In jedem Fall melde ich mich wieder zur von Dir vorgeschlagenen Lösung nach einem Test.

Grüße und nen angenehmen Tag,
Andreas
Bitte warten ..
Mitglied: rubberman
30.09.2011 um 22:02 Uhr
Hallo ahstax.

Danke für den "angenehmen Tag", leider war er alles Andere als angenehm ... egal.
Natürlich lassen sich Textfiles öffnen und auslesen. INI Dateien auf diese Art auszulesen und eine eindeutige Zuordnung zu bekommen, ist dann aber doch eine kleine Herausforderung. GetPrivateProfileString ist da mit einigem Abstand die beste und sicherste Methode.
Teste erst mal meinen Vorschlag. Falls das nicht den gewünschten Erfolg bringt, solltest du im nächsten Post unbedingt erwähnen in welcher Sprache du eigentlich programmierst. Im Moment sieht das für mich ein wenig nach VBA aus, kann mich aber auch irren.

Grüße
rubberman
Bitte warten ..
Mitglied: ahstax
04.10.2011 um 09:47 Uhr
Äh... ja... in der Tat...
Nicht sagen, worum es geht, macht es zwar geheimnisvoll, aber schlecht zu handhaben...

Es geht hier um VBA

Grüße,
Andreas
Bitte warten ..
Mitglied: rubberman
05.10.2011 um 02:12 Uhr
Hallo ahstax.

Kein Problem.

Trotzdem solltest du erst testen, ob du mit dem Replace weiter kommst. Alles andere wird nicht sonderlich schön, zumal du sonst, wie schon mehrfach erwähnt, keine standardkonforme INI Datei zugrunde legst. Ich habe keine Ahnung auf welche Art diese Datei erzeugt wird, aber vielleicht kann man da auch noch automatisieren oder die Anzahl der Zeilen variabel gestalten (schließlich gibt es ja auch ein Text02, warum nicht noch mehr?).
Eventuell könntest du auch statt einer INI eine XML Datei erzeugen, dann könnte man auf eine Array von Objekten zurückgreifen.
Es gibt also andere Alternativen, als Multiline-Einträge in einer INI Datei.

Grüße
rubberman
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Wie ersetze ich in einer .txt ein Lehrzeichen mit einen Zeilenumbruch?

gelöst Frage von AlexIOTBatch & Shell4 Kommentare

Hallo Zusammen, ich hoffe Ihr könnt mir helfen: folgende Ausgangssituation: Inhalt der .txt-Datei: Vorname Nachname, Abteilungskürzel <Mailadresse>; Vorname Nachname, ...

Sonstige Systeme

Daten aus txt-Files sammeln

gelöst Frage von MegaGigaSonstige Systeme16 Kommentare

Moin :-) Erstmal: Ich habe kein gescheites Unterforum dafür gefunden, falls ihr ein besseres findet bin ich froh darum ...

Batch & Shell

Txt-File splitten

gelöst Frage von apex.predator24Batch & Shell5 Kommentare

Hallo Community Ich bräuchte eure Hilfe. Folgendes: wir müssen wir einen Kunden eine Batch-Datei oder PowerShell erstellen, welche eine ...

Windows Server

Auswertung zwischen zwei .txt file mit powershell

Frage von expetrovWindows Server1 Kommentar

Hallo zusammen, Könnt ihr bitte für mich kurz Helfen wie ich die untenstehende auswertung zwischen die zwei .txt file ...

Neue Wissensbeiträge
Utilities
Teamviewer 14 Verbindungsprobleme mit Proxy
Tipp von PeterleB vor 1 TagUtilities

Nach dem Umstieg von Version 13 auf 14 wollte sich TV nicht mehr mit dem Netz verbinden, ignorierte offenbar ...

Administrator.de Feedback
Unsere Datenbank wurde umgestellt
Information von Frank vor 1 TagAdministrator.de Feedback5 Kommentare

Hallo User, ich habe in der Nacht unsere Datenbank umgestellt. D.h. neue Version (MySQL 8) und andere Örtlichkeit. Sollte ...

Sonstige Systeme
Es war einmal ein BeOS - Wer erinnert sich noch?
Information von BassFishFox vor 3 TagenSonstige Systeme8 Kommentare

Hallo, Bin gerade ueber Haiku gestolpert, von dessen Existenz als "Nachfolger des BeOS" ich wusste nur mich nie wirklich ...

Datenschutz

Microsoft und DSGVO - ob das wohl jemals klappt (Probleme beim Datenabfluss für Office Pro Plus)?

Tipp von VGem-e vor 4 TagenDatenschutz5 Kommentare

Servus Kollegen, siehe Aber wer setzt schon MS Office Pro Plus ein? Wie dann der Stand beim "normalen" MS ...

Heiß diskutierte Inhalte
Windows 10
Programm unter Windows 10 automatisch mit administrativen Rechten starten
Frage von GrafmulderWindows 1021 Kommentare

Hallo zusammen! Zur Situation: Ich benutze Windows 10 Pro für Workstations (Build 1803) mit zwei Konten. Einem Administratorkonto und ...

Vmware
Gebrauchten ESXi- Server verkaufen: Festplatten DSGVO-konform löschen?
Frage von l.scheperVmware18 Kommentare

Hallo, wir möchten einen gebrauchten FUJITSU Server verkaufen. Auf dieser Maschine ist noch ein installiertes ESXi 5.1 und ne ...

LAN, WAN, Wireless
Empfehlung Powerline Adapter
Frage von AgilolfingerLAN, WAN, Wireless16 Kommentare

Hallo Zusammen, ich brauche eine Empfehlung von euch. Ich möchte in einem privaten Haushalt eine Powerline Lösung einrichten. Allerdings ...

Router & Routing
Dediziertes ISP -Routing
gelöst Frage von niLuxxRouter & Routing13 Kommentare

Liebe Community, Ich hätte eine kurze Frage an euch. Durch verschiedene Umstände kann es nun sein, dass sich zwei ...