Avatar billede extension Nybegynder
02. juni 2009 - 19:28 Der er 9 kommentarer

Fjerne tomme linieskift?

Jeg har lavet et "samlefelt" der samler dataene fra flere Repetitions felter.
Feltet virker som det skal, men når feltet CSV eksporteres får jeg desværre også linieskift fra tomme felter med.

Kan jeg lave et "kopi-felt" heraf, der er stripped for disse "tomme" linieskift.

Mit felt calc ser således ud:

Case ( not IsEmpty(GetRepetition ( option1 ; 1 )); GetRepetition ( option1 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option1 ; 1 )); GetRepetition ( option1 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option1 ; 1 )); GetRepetition ( option1 ; 3 )& ":"&"default")&¶&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 3 )& ":")&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 4 ))& ¶&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 3 )& ":")&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 4 ))& ¶&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 3 )& ":")&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 4 ))

og resultatet ser sådan ud:
Almindelig::5.75:default
m/smør:+4:9.75:
m/smør og ost:+7:12.75:

- her er der er blot et linieskift for meget til sidst.
Hvis alle "optionfields" er tomme får jeg eksporteret 4 linieskift for meget.

Håber så inderligt på en løsning...

Venlig hilsen
Boris
Avatar billede zordesign Nybegynder
02. juni 2009 - 21:15 #1
Hej Boris

Hvis du kun har disse fire grupper af repetitioner, så vil jeg foreslå følgende lidt klodsede beregning:

Let( [
t1 = Substitute( List( option1 ); "¶"; ":" ) ;
t2 = Substitute( List( option2 ); "¶"; ":" ) ;
t3 = Substitute( List( option3 ); "¶"; ":" ) ;
t4 = Substitute( List( option4 ); "¶"; ":" ) ;
eksport =
  If( IsEmpty( t1 ); ""; t1 & "¶" ) &
  If( IsEmpty( t2 ); ""; t2 & "¶" ) &
  If( IsEmpty( t3 ); ""; t3 & "¶" ) &
  If( IsEmpty( t4 ); ""; t4 & "¶" )
]  ;
Left( eksport; Length( eksport ) - 1 )
)

De fire repeterende felter samles sammen i t1, t2, t3 og t4. Vi har altid et linjeskift for meget, og det fjerner vi blot til sidst ved at eksportere alle tegn bortset fra ét.

Kan den beregning bruges? Ellers kan du kombinere dine oprindelige beregninger med mine t1, .. , t4 så du i stedet for at sammenligne IsEmpty sammenligner med ":::" (dvs. tre kolonner uden noget at adskille).

Giver det mening?

- André
Avatar billede extension Nybegynder
02. juni 2009 - 21:19 #2
Mange tak...
- prøver lige om det virker.

Vh
Boris
Avatar billede extension Nybegynder
02. juni 2009 - 21:54 #3
Det er meget tæt på nu....

Blot mangler jeg et (:) kolon som afslutning på de enkelte linier

Almindelig:5.75:
m/smør:+4:9.75:
m/smør og ost:+7:12.75:

Vh
Boris
Avatar billede zordesign Nybegynder
03. juni 2009 - 07:41 #4
Hej Boris

De manglende afsluttende kolonner klarer du let: Hvis du retter definitionen af eksport til nedenstående, så er der også kolonner i slutningen af linjen:

eksport =
  If( IsEmpty( t1 ); ""; t1 & ":¶" ) &
  If( IsEmpty( t2 ); ""; t2 & ":¶" ) &
  If( IsEmpty( t3 ); ""; t3 & ":¶" ) &
  If( IsEmpty( t4 ); ""; t4 & ":¶" )

Det sidste kolon får lov at stå - det er kun det sidste linjeskift, der bliver slettet til sidst. Så tror jeg, den er der...

- André
Avatar billede extension Nybegynder
03. juni 2009 - 10:03 #5
Hejsa,
Jeg roder bestemt noget rundt i det....

Begge disse calc'er laver et korrect resultat i filemaker, blot er sidste afslutning tilsyneladende ikke korrekt når de bliver importerede i mySql.
PS. det er vigtigt at der bliver checket om første felt er tomt i hver linie.
Hvis tomt: SKAL hele linien være tom.
Hvis IKKE tom: SKAL der være kolon OGSÅ mellem tomme felter

Vh
Boris

Let( [
t1 = Substitute( List( option1 ); "¶"; ":" ) ;
t2 = Substitute( List( option2 ); "¶"; ":" ) ;
t3 = Substitute( List( option3 ); "¶"; ":" ) ;
t4 = Substitute( List( option4 ); "¶"; ":" ) ;
eksport =
Case ( not IsEmpty(GetRepetition ( option1 ; 1 )); GetRepetition ( option1 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option1 ; 1 )); GetRepetition ( option1 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option1 ; 1 )); GetRepetition ( option1 ; 3 )& ":"&"default")&¶&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 3 )& ":")&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 4 ))& ¶&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 3 )& ":")&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 4 ))& ¶&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 3 )& ":")&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 4 ))
]  ;
Left( eksport; Length( eksport ) - 1)
)

Eller denne:

Case ( not IsEmpty(GetRepetition ( option1 ; 1 )); GetRepetition ( option1 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option1 ; 1 )); GetRepetition ( option1 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option1 ; 1 )); GetRepetition ( option1 ; 3 )& ":"&"default")&¶&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 3 )& ":")&
Case ( not IsEmpty(GetRepetition ( option2 ; 1 )); GetRepetition ( option2 ; 4 ))& ¶&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 3 )& ":")&
Case ( not IsEmpty(GetRepetition ( option3 ; 1 )); GetRepetition ( option3 ; 4 ))& ¶&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 1 )& ":")&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 2 )& ":")&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 3 )& ":")&
Case ( not IsEmpty(GetRepetition ( option4 ; 1 )); GetRepetition ( option4 ; 4 ))
Avatar billede zordesign Nybegynder
03. juni 2009 - 10:22 #6
Hej Boris

Du skal bruge denne her så. Fort hvert af de fire repeterende felter tester vi først, om der er noget indhold - hvis ikke genererer vi ikke noget tekst, ellers sætter vi de fire repetioner sammen og afslutter med linjeskift.

Den underforståede logik er, at der er linjeskift efter enhver linje. Vi ved ikke, om felt1, felt2, felt3 eller felt4 er det sidste felt, der er indhold i, men vi ved, at der altid er et linjeskift for meget uanset hvilket felt, det kommer fra. Derfor skal der også være linjeskift efter den sidste linje - det bliver automatisk slettet af Left-funktionen. Det var den detalje, der manglede i din funktion.

Nu skulle den være der!

- André

Let(
eksport =
If( IsEmpty( GetRepetition ( option1 ; 1 ) ) ; "" ;
GetRepetition ( option1 ; 1 ) & ":" & GetRepetition ( option1 ; 2 ) & ":" & GetRepetition ( option1 ; 3 ) & ":" & "default" & "¶" )&

If( IsEmpty( GetRepetition ( option2 ; 1 ) ) ; "" ;
GetRepetition ( option2 ; 1 ) & ":" & GetRepetition ( option2 ; 2 ) &  ":"  & GetRepetition ( option2 ; 3 ) & ":" & GetRepetition ( option2 ; 4 ) & "¶" ) &

If( IsEmpty( GetRepetition ( option3 ; 1 ) ) ; "" ;
GetRepetition ( option3 ; 1 ) & ":" & GetRepetition ( option3 ; 2 ) &  ":"  & GetRepetition ( option3 ; 3 ) & ":" & GetRepetition ( option3 ; 4 ) & "¶" ) &

If( IsEmpty( GetRepetition ( option4 ; 1 ) ) ; "" ;
GetRepetition ( option4 ; 1 ) & ":" & GetRepetition ( option4 ; 2 ) &  ":"  & GetRepetition ( option4 ; 3 ) & ":" & GetRepetition ( option4 ; 4 ) & "¶" )
;
Left( eksport; Length( eksport ) - 1)
)
Avatar billede extension Nybegynder
03. juni 2009 - 11:04 #7
Din calc er bestemt korrekt lavet nu...
- men det er stort set lige meget hvad jeg (vi) gør, efter import i mySql mangler der et linieskift efter sidste linie. Hvis jeg indsætter det manuelt i mySql (på nettet) funker det som det skal.

Vh
Boris
Avatar billede zordesign Nybegynder
03. juni 2009 - 12:11 #8
Når du skriver "sidste linje" er det så sidste linje i eksportfilen eller sidste linje i den enkelt post?

FileMaker laver jo et linjeskift efter hver post i eksporten, men der kommer ikke et linjeskift efter den sidste post.

En måske ikke særlig køn men ganske effektiv løsning er at have en post uden data til sidst i eksporten. Så kommer der et linjeskift mellem den sidste egentlige post og dummyposten, og da der jo ikke er noget feltindhold i den sidste post (dummyposten), vil beregningen heller ikke generere data.

- André
Avatar billede extension Nybegynder
03. juni 2009 - 12:41 #9
Bagefter tekst indskrevet på nettet (i mySql) er der ingen ekstra linieskift.

Almindelig::5,75:default
m/smør  :+4:9,75:
m/smør og ost:+7:12,75:

Din calc virker "perfekt" blot mangler der en eller anden usynlig afslutning på feltet. Det hjælper tilsyneladende IKKE at lave ekstra linieskift i FileMaker eksporten, heller ikke i den eksporterede fil. Intet bliver korrekt før jeg manuelt har lavet en afslutning direkte i mySql feltet. Så mySql laver sikkert et eller andet tegn som afslutning.

TekstWrangler viser linieskift som et omvendt spørgsmålstegn og afslutning på "Record" er et stort L der er lagt vandret.

De omvendte spørgsmålstegn erstetter jeg (som du anviste).
Så umiddelbart er alt korrekt (i eksporten)

Vh
Boris
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester