Laden...

Vermeidung von Leerzeilen beim Parsen von Texttemplate mit C# & Handlebars

Erstellt von Campy vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.091 Views
C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 7 Jahren
Vermeidung von Leerzeilen beim Parsen von Texttemplate mit C# & Handlebars

Hallo zusammen,

ich verwende Handlebars.Net in meiner Anwendung um ein Texttemplate zu parsen.

TEMPLATE:

Ticketnummer:   {{{Number}}}
Leistungsdatum / Zeitraum: {{{StartDate}}} bis {{{EndDate}}}
{{{#if Orderer}}}Besteller:   {{{Orderer}}}{{{/if}}}
{{{#if OrderType}}}Eingangsform:   {{{OrderType}}}{{{/if}}}
{{{#if ContactPerson}}}Kontaktperson:   {{{ContactPerson}}}{{{/if}}}
Beschreibung:
{{{Text}}}

ERGEBNIS:
Ticketnummer: TI10019
Leistungsdatum / Zeitraum: 21.10.2014 bis

Eingangsform: telefonisch
Kontaktperson: asfdasdf
Beschreibung:
cxdssdf

PROBLEM:
Wie bekomme ich es hin, dass keine Leerzeilen generiert werden?
Ich habe schon \r\n vor die if Closing Tags geschrieben dies hat jedoch auch nichts gebracht.

Vielen Dank für Eure Hilfe!

A programmer is just a tool, which converts coffeine into code! 🙂

2.080 Beiträge seit 2012
vor 7 Jahren

Ich kenne das Template nicht, daher kann ich nur raten

Aber ich würde es mal so versuchen, dass Du die Zeile mit dem IF an's Ende der Vorherigen Zeile legst und in das IF ein \r\n rein schreibst

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 7 Jahren

Hallo Palladin007,

das Template habe ich oben mit abgebildet.

A programmer is just a tool, which converts coffeine into code! 🙂

16.842 Beiträge seit 2008
vor 7 Jahren

Du hast doch in Deinem Template vor und nach dem If ein entsprechendes \r\n.
Das bleibt da natürlich auch, wenn das if nicht erfüllt wird; und dadurch hast Du Deine Leerzeilen.
Musst halt die NewLine Zeichen in Dein if packen; ist ja bei einer normalen Textdatei nicht anders.

2.080 Beiträge seit 2012
vor 7 Jahren

das Template habe ich oben mit abgebildet.

Ich hab mich verschrieben, ich mein eigentlich Framework 😄
Ich kenne das Framework nicht

Im Grunde meine ich aber genau das, was Abt auch gesagt hat.
Es sollte in etwa so aussehen:

Leistungsdatum / Zeitraum: {{{StartDate}}} bis {{{EndDate}}}{{{#if Orderer}}}\r\nBesteller: {{{Orderer}}}{{{/if}}}

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 7 Jahren

Hallo,

das hab ich schon versucht gehabt allerdings wird dann \r\n mit abgedruckt 😦

Vielen Dank und Grüße!

A programmer is just a tool, which converts coffeine into code! 🙂

16.842 Beiträge seit 2008
vor 7 Jahren

Zeig mal Deinen Code. Niemand hat Lust zu raten. 👍

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 7 Jahren

Entschuldige bitte da hast du natürlich recht:


                                                var templateValues = new
                                                {
                                                    Number = st.Number,
                                                    StartDate = st.DateOfOrder.HasValue ? st.DateOfOrder.Value.Date.ToShortDateString() : null,
                                                    EndDate = st.DateOfFinish.HasValue ? st.DateOfFinish.Value.Date.ToShortDateString() : null,

                                                    OrderType = st.OrderType != null ? st.OrderType.Name : null,
                                                    Text = st.Shipment_Text,
                                                    ContactPerson = st.ContactPerson != null ? st.ContactPerson.DisplayName : null,
                                                    Orderer = st.Orderer != null ? st.Orderer.DisplayName : null,
                                                    StatementTime = st.StatementTime.TotalHours,

                                                    Employee_Salutation = st.Employee != null && st.Employee.Salutation != null ? st.Employee.Salutation.Name : null,
                                                    Employee_FirstName = st.Employee != null ? st.Employee.Firstname : null,
                                                    Employee_LastName = st.Employee != null ? st.Employee.Lastname : null,
                                                };

var templateLine = Handlebars.Compile(template.TemplateText);
var result = templateLine(templateValues);

Template:
Ticketnummer: {{{Number}}}
Leistungsdatum / Zeitraum: {{{StartDate}}} bis {{{EndDate}}}{{{#if Orderer}}}\r\nBesteller: {{{Orderer}}}{{{/if}}}{{{#if OrderType}}}\r\nEingangsform: {{{OrderType}}}{{{/if}}}{{{#if ContactPerson}}}\r\nKontaktperson: {{{ContactPerson}}}{{{/if}}}
Beschreibung:
{{{Text}}}

Result:
Ticketnummer: TI10019
Leistungsdatum / Zeitraum: 21.10.2014 bis \r\nEingangsform: telefonisch\r\nKontaktperson: asfdasdf
Beschreibung:
cxdssdf

A programmer is just a tool, which converts coffeine into code! 🙂

1.040 Beiträge seit 2007
vor 7 Jahren

Ich würde es so ausprobieren:

Template:
Ticketnummer: {{{Number}}}
Leistungsdatum / Zeitraum: {{{StartDate}}} bis {{{EndDate}}}{{{#if Orderer}}}
Besteller: {{{Orderer}}}{{{/if}}}{{{#if OrderType}}}
Eingangsform: {{{OrderType}}}{{{/if}}}{{{#if ContactPerson}}}
Kontaktperson: {{{ContactPerson}}}{{{/if}}}
Beschreibung:
{{{Text}}}

EDIT: Obwohl, wirkt auch falsch. 🤔

C
Campy Themenstarter:in
439 Beiträge seit 2008
vor 7 Jahren

@p!ille: Ich habs versucht und jetzt kommt das richtige Ergebnis raus:

Ticketnummer: TI10019
Leistungsdatum / Zeitraum: 21.10.2014 bis
Eingangsform: telefonisch
Kontaktperson: asfdasdf
Beschreibung:
cxdssdf

Vielen herzlichen Dank!

A programmer is just a tool, which converts coffeine into code! 🙂