Att byta mellanslag mot tab

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
sodjan
EF Sponsor
Inlägg: 43257
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Att byta mellanslag mot tab

Inlägg av sodjan »

Fick också en fil från Protte. För det första ser jag ett annat litet problem,
det finns även <tab> tecken *inne* i fältdata. Om dessa behålls
så ser jag inte annat än att detta måste störa inläsningen av
filen "tab-separerad".

Men för övrigt så var det bara att öppna den i OpenOffice Calc (i mitt fall),
markera var gränserna ska vara (det var ju enkelt eftersom det står
i klartext i rubrikerna, bara att markera samma positioner) samt sedan
spara den i CSV format med <tab> som avgränsare (komma är default).
Filen är returnerad.

Nerre har postat hur det ser ut i Excel, det var i princip samma sak i OO.
Och jag använde postionerna i rutbrikerna för att markera gränserna. Enkelt.

Nerre och TomasL, hur hanterade Excel att det var <tab> i själva datat ?
D.v.s då man skapar den tab-separerade utfilen?

Samma reusultat kan man så klart uppnå med lämpligt scriptverktyg
om man vill ha det som en "one-click" lösning, men hur man än gör
så krävs det att man faktiskt kollar hur det ser ut innan man postar
lösningar som i alla fall inte fungerar.

Men som sagt, denna fil kommer sannolikt inte att fungera i alla fall,
eftersom den har "avgränsare" (d.v.s <tab> tecken) som del av datat.

Eller föresten! Jag ser att OO la till '"' avskiljare runt de textfält som
innehåller fältavgränsaren, så det kanske fungerar i alla fal...
Samma rader, i nedre delen är tab-tacknen ersatta med "<tab>":

Kod: Markera allt

TO 223 BTS4140	#264	3466	-1485	2840	\F.TO 223 BTS414	 TOP
TO 223 BTS4140	#265	3766	-2855	2960	\F.TO 223 BTS414	 TOP
	#266	2555	-1950	-0	"RTPAD	25	11	50"	 Unknown
	#267	2555	-2000	-0	"RTPAD	25	11	50"	 Unknown
	#268	2555	-2050	-0	"RTPAD	25	11	50"	 Unknown

TO 223 BTS4140<tab>#264<tab>3466<tab>-1485<tab>2840<tab>\F.TO 223 BTS414<tab> TOP
TO 223 BTS4140<tab>#265<tab>3766<tab>-2855<tab>2960<tab>\F.TO 223 BTS414<tab> TOP
<tab>#266<tab>2555<tab>-1950<tab>-0<tab>"RTPAD<tab>25<tab>11<tab>50"<tab> Unknown
<tab>#267<tab>2555<tab>-2000<tab>-0<tab>"RTPAD<tab>25<tab>11<tab>50"<tab> Unknown
<tab>#268<tab>2555<tab>-2050<tab>-0<tab>"RTPAD<tab>25<tab>11<tab>50"<tab> Unknown
Notera dubbelfnuttarna kring "RTPAD...".

För att summera :
- Undvik mellanslag som en del av datat (om det inte är adresser eller namn o.s.v).
- Undvid "osynliga" tecken som del av datat, t.ex <tab> i just detta fall.
- En enkel "replace" av dubbla mellanslag fungerar *inte* (eftersom det är enkla mellanslag mellan fält i några fall).
- Man måste *se* filen innan det är meningsfullt att posta lösningar. Perl one-liners pekar enbart på oerfarenhet.
sodjan
EF Sponsor
Inlägg: 43257
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Att byta mellanslag mot tab

Inlägg av sodjan »

Fixk svar från Protte, filen "fungerade" inte.
Har nu skickat om filen med <komma> som fältavskiljare istället
för <tab>. Jag fick för mig att det var <tab> som efterfrågades...
Vad var det annars som skulle bytas ut till <tab> !?
Användarvisningsbild
prototypen
Inlägg: 11107
Blev medlem: 6 augusti 2006, 13:25:04
Ort: umeå

Re: Att byta mellanslag mot tab

Inlägg av prototypen »

Nu ser det bättre ut, kan öppna i både OpenOffice och i Numbers.

Om jag nu får en steg för steg beskrivning av Sodjan så kanske jag lyckas själv.
Jag är ledsen att jag ville ha dit tab men det vad jag trodde att det skulle vara och det var vad tillverkaren sa att det borde vara för att inte blanda ihop det med det mellanslag som inte borde vara där (de språkliga mellanslagen).

Har inte använt OO så kan någon ge en hint om var jag hittar sortering av kolumner. Alla jordning och PAD och RTpad ska bort och det är väldigt enkelt om de står tillsammans.
Även hur jag kan se rad och kolumnbeteckningarna.

Är det någon fler som vill ha filen så skicka PM

Protte

EDIT Det är Numbers jag inte hittar sortera i.
OO klagar på data i fält bredvid i texten längst upp men ska prova vidare med det
Användarvisningsbild
hcb
Moderator
Inlägg: 6008
Blev medlem: 23 februari 2007, 21:44:50
Skype: hcbecker
Ort: Lystrup / Uppsala
Kontakt:

Re: Att byta mellanslag mot tab

Inlägg av hcb »

>Det är Numbers jag inte hittar sortera i.

Klicka på "Reorganize" i tabellens fönsterlist och välj "sort" enligt lämpligt kriterium.
sodjan
EF Sponsor
Inlägg: 43257
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Att byta mellanslag mot tab

Inlägg av sodjan »

> Har inte använt OO så kan någon ge en hint om var jag hittar sortering av kolumner.

Jag hittar det (svensk version av OO) under "Data" -> "Sortera...".
Sedan är det bara att välja "Kolumn A" (t.ex).

Jag sjutton är "Numbers" ??
(Om det är "Part Number" som avses, så säg gärna det...)

> Om jag nu får en steg för steg beskrivning av Sodjan så kanske jag lyckas själv.

Öppna TXT filen med OO Calc (eller Excel).
Du ska/bör få en dialog liknande den nedan.
Jag har sedan markerat "Delningsalternativ" -> "Fast bredd".
Sedan markerat de positioner som står i rubrikraden. Klart.

Vid export valde jag CSV och markerade "Redigera filterinställningar".
Då får man en extra dialog (bild 3) där man kan välja fältavgränsare o.s.v.
Det var där jag först valde <tab> som fältavgränsare, men det var ju fel...
Man kan även markera "Citera alla textceller", det gjorde inte jag och
då verkar det som att enbart de som innehåller fältavgränsaren
citeras med automatik. Beroende på hur inläsningen går till så kan det
vara lika bra att alltid citera alla textceller (med "textavgränsaren").
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
prototypen
Inlägg: 11107
Blev medlem: 6 augusti 2006, 13:25:04
Ort: umeå

Re: Att byta mellanslag mot tab

Inlägg av prototypen »

sodjan skrev:
<<<Men för övrigt så var det bara att öppna den i OpenOffice Calc (i mitt fall),
markera var gränserna ska vara (det var ju enkelt eftersom det står
i klartext i rubrikerna, bara att markera samma positioner) samt sedan
spara den i CSV format med <tab> som avgränsare (komma är default).
Filen är returnerad.

Och jag använde postionerna i rutbrikerna för att markera gränserna. Enkelt.>>>
Jahapp
Sitter här med OO
Hur markerar jag gränser?
Hur ser jag gränserna i rubrikerna är det siffrorna 1(37) 40(4) osv
Puttar man in siffrorna i klartext någonstans? eller klick någonstans?

Att spara CSV format har jag kläm på.

Har några få kalkylark i AW, har aldrig provat OO kalkyl förrän idag så hjälp mig igång.

Protte

P1030508.jpg
Driver kort 1.0 är på bilden, signalerna kom ut 8 steg fel då det fattades ett skiftregister
Kortet 1.1 hade jag tydligen glömt kolla isolationsavståndet så det var kortslutning UNDER en krets, 30 kort med kortslutning men vi tog loss kretsen och skar bort kortisen.
Kort 1.2 där har skiftregistret som fattades i 1.0 ersatts av en drivkrets.

Det har blivit en dyr resa men det blir alltid bättre.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
MiaM
Inlägg: 13506
Blev medlem: 6 maj 2009, 22:19:19

Re: Att byta mellanslag mot tab

Inlägg av MiaM »

prototypen skrev:Så här ser det ut från början
Med risk för att framstå som en opedagogisk besserwisser så påpekar jag att en fil har inget "utseende". Däremot blir det ett visst utseende på skärmen (eller på skrivaren, eller i det här fallet på skärmdumpen) med just det program du använder för att visa filens innehåll.

Extramfallet på hur programmet påverkar är att det skulle bli bara smörja om programmet var avsett för EBCDIC-kodade textfiler.

Det som rör till det i detta fall är dock att programmet du använder kör en proportionell font. Tumregel ett är att använda en monospacefont för textfiler. Jag är osäker på om det går att confa default-textfil-visarprogrammet i OS X att köra monospace för just textfiler, men ett garanterat säkert sätt att titta på filerna är att köra "cat" (visar hela filen utan pauser) eller "more" (visar en skärmsida i taget) på filen i ett terminalfönster.

Som AndLi redan påpekat så blir det monospaceteckensnitt i forumet om man använder Code-taggen:

Kod: Markera allt

*                                      CKT.   Centroid
*        PART NUMBER                   REF.   X      Y      ROT 0.1d  LIBRARY         SIDE
*           1(37)                     40(4)  46(4)  53(4)    62(4)   69(16)            85(10)

BAS 32L SOD80                          #73   1785   -6109    ????   \F.BAS 32L SOD80 TOP        

BAS 32L SOD80                          #74   1785   -6809    ????   \F.BAS 32L SOD80 TOP        

BAS 32L SOD80                          #75   1785   -6609    ????   \F.BAS 32L SOD80 TOP        

BAS 32L SOD80                          #76   1785   -6409    ????   \F.BAS 32L SOD80 TOP        

74HC132                                #78   1790   -4424    3530   \F.74HC132			    TOP
Här ser man tydligt att kolumnerna har en fast bredd (i just denna fil). Det enda oklara är huruvida kolumnbredden kan variera mellan filer. Prova gärna att lägga in en komponent med ett namn som är längre än 38 tecken, och se hur filen ser ut då. Likaså kan det vara intressant att se vad som händer om du väljer ett gigantiskt stort kretskort, flera tiopotenser större, så att x/y-värdena inte "får plats" med nuvarande kolumnbredder.

Om kolumnerna alltid är fasta, d.v.s. formatet har en fast gräns på maxvärden på X/Y och maxlängd på komponentnamn o.s.v., så är det riktigt enkelt att tolka filen. Om formatet är variabelt beroende på hur breda kolumner som behövs så behöver rubrikraden tolkas, det är inte jättesvårt heller.

Om formatet är helt fast så blir det riktigt lätt.
Här finns t.ex. några tips

Kolumnerna börjar på position: 0 39 45 52 62 69 (om jag tittat rätt)

Om du t.ex kör detta i terminalen:

Kod: Markera allt

paste --delimiter=';'  <(cut file -c0-38) <(cut file -c45-61) 
Så borde du få rader i stil med
74HC132 ;1790 ;-4424

Du får givetvis lägga på fler <(cut file -cX-Y)-delar för att få med fler kolumner.

Ta bort denna del för att få TAB som separator:

Kod: Markera allt

--delimiter=';'
Det verkade lite luddigt vad du verkligen vill ha för separator så jag tog både ; och TAB som exempel.

Om du vill slippa skriva in kommandot varje gång och vill slippa ha filnamnet utspritt på femtioelva ställen så kan du skapa en scriptfil (textfil) som ser ut t.ex. såhär:

Kod: Markera allt

#!/bin/sh
paste --delimiter=';'  <(cut $1 -c0-38) <(cut $1 -c45-61) >$2
kör sen chmod 755 på scriptfilen så den blir exekverbar.
Då kan du köra konverteringen med ./scriptfil infilnamn utfilnamn

P.S. glöm inte bort att om man kör OS X utan att använda terminalen så är det lite som att lyxrenovera sitt badrum och sen aldrig någonsin bada där :wink:
sodjan
EF Sponsor
Inlägg: 43257
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Att byta mellanslag mot tab

Inlägg av sodjan »

> Hur markerar jag gränser?

Se min bild på importdialogen i mitt förra inlägg.
Du klickar på de små röda prickarna för att ta bort dom.
Du klickar i "linjalen" för att sätta in nya brytningar/prickar.
Och du kan "dra" prickarna för att flytta dom.

Jag prickade som sagt in samma positioner som står
i rubrikraden i sjäva filen (minus 1, det var något med
om första positionen var position 1 eller 0...)

Och i princip gör man precis samma sak i Excel, det var bara
att jag har valt (som ett experiment) att köra OO, men jag
funderar faktiskt på att skaffa ett "riktigt" Office paket... :-)

Sen tar ju MiaM upp några fundamentala frågor som jag har valt att
lämna därhän tillsvidare, t.ex frågan om fomatet alltid stämmer överens
med den nu visade filen, eller om de aktuella positionerna (och längderna)
för varje fält bestäms dynamiskt av det aktuella datat i filen...

Om detta var *mitt* data, och om detta behöver köras upprepade gånger,
och om det *inte* går att verifiera att formattet alltid är enligt exemplet,
så skulle jag använda informationen (d.v.s positionerna och längderna)
i rubrikraden för att styra bearbetningen dynamiskt...
Användarvisningsbild
prototypen
Inlägg: 11107
Blev medlem: 6 augusti 2006, 13:25:04
Ort: umeå

Re: Att byta mellanslag mot tab

Inlägg av prototypen »

MiaM pekade på en kul grej, vad händer i extremläget längst ner i hörnet och de fasta kolumnerna, NÄ det gick inte, mitt program går till 30 tum (drygt) motsvarande 2^15 mil och X positionen blir då 5 siffrig men Y bara 4 siffrig.
Ska tillskriva program makarna och höra vad de säger.

De har lovat titta på avgränsarna i "filen/kalkylbladet"
De svarar att det format som kommer ur programmet är ett äldre format som funkar på gamla maskiner men de skulle lägga till en dialogruta till för att välja många mellanslag eller tab. Kanske.

Sodjan, jag ska sätta mig ner och ta mig genom din bruks men måste svarva lite prylar till en orgel först.


Protte
Användarvisningsbild
MiaM
Inlägg: 13506
Blev medlem: 6 maj 2009, 22:19:19

Re: Att byta mellanslag mot tab

Inlägg av MiaM »

Orkade du prova det här:

Kod: Markera allt

#!/bin/sh
paste --delimiter=';'  <(cut $1 -c0-38) <(cut $1 -c45-61) >$2
(De exakta parametrarna är bara ett exempel, får justeras efter de kolumner du vill ha ut)
Skriv svar