webForumDet fria alternativet

Sortera semikolonsorterad data och lägga in i databas.

ASP

9 svar · 487 visningar · startad av Hulth

Medlem sedan juni 2001272 inlägg
Frågan#1

Om vi säger att jag har en textfil som innehåller en massa information som är separerad med semikolen (tex om man exporterar ett excel-ark till rådata). Den kan se ut såhär:

fältnamn1;fältnamn2;fältnamn3;
rad1;rad2;rad3;
rad4;rad5;rad6;

Om det finns något enkelt och smidigt sätt att plocka in det i en databas via asp. Har tittat lite på regexp men kan inte komma till sans med hur man ska göra det.

Ett annat problem kan vara tex om radbrytningarna i filen saknas, alltså att ovanstående skulle se ut såhär:

fältnamn1;fältnamn2;fältnamn3;rad1;rad2;rad3;rad4;rad5;rad6;

Om jag vet hur många fält det är, borde det ju fortfarande gå att plocka ut informationen och lägga in den i en databas?

Tacksam för all hjälp.

Medlem sedan maj 20018 027 inlägg
#2

Här hittar du ett exempel för MySql: http://www.blue105.com/internet/support/mysql_offline.html

LOAD DATA LOCAL INFILE 'export_file_name.txt' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '\'

Valde att citera enbart sql-satsen, för att betona att det inte spelar någon roll vilket scriptspråk du använder. Komma-tecknet får du naturligtvis byta ut mot semikolon. Frågan är vad ENCLOSED BY '\' skulle göra. Möjligt att du ska skippa den delen av satsen.

Medlem sedan juni 20034 013 inlägg
#3

Det står ENCLOSED BY '\"' alltså ett escapat citationstecken inom apostrofer. Om man tydliggör det lite med mellanslag blir det: ' \" '

Eftersom det står skrivet i en php-sträng kan man inte bara skriva ut citationstecken rakt uppochner, utan de måste escapas, alltså få ett backslash framför. Till på köpet är det en Mysql-sträng man uttrycker inne i php-strängen, och den ska stå inom apostrofer.

Enclosed by betyder att det tecknet förekommer runt textfälten, alltså typ:

"rad 1";"rad 2"; osv...

Är så inte fallet så tar man inte med enclosed by...

Medlem sedan juni 2001272 inlägg
#4

Frågan är om motsvarande sql-sträng skulle fungera ihop med access, för det finns ingen möjlighet att köra mysql där detta skulle behöva användas.

Sen kvarstår ju det problemet om allt ligger "på en rad" i textfilen, har provat att importera till access, excel osv, och då tror programmet att all data är ett par hundra koluner och lägger allt på en rad bara.

Medlem sedan juli 20041 183 inlägg
#5

Funkar det inte att splitta vid ; och sedan loopa igenom arrayen som bildas?

Medlem sedan juni 2001272 inlägg
#6

hur mycket information kan man lägga i en array då?

För nu snackar vi textfiler på uppåt 2mb

Medlem sedan juli 20041 183 inlägg
#7

Vad jag vet är de ej begränsade även om man inte rekommenderas att lagra så stora delar i en array...

Handlar det om massor av rader på det formatet du beskrev loopar du igenom rad för rad och då blir det inte mycket data...

Handlar det om långa meningar i de fälten du beskrev på uppemot 2MB borde det fungera men jag vågar inte lova något :P

Medlem sedan juni 2001272 inlägg
#8

för i vissa fall kommer informationen som ska bearbetas ligga i en enda lång rad, och i vissa fall är det uppdelad på rader.. Men hur skulle man göra en sån array isåfall, och hur loopar man igenom den?

Har aldrig arbetat med arrays så jag har inte en aning

Medlem sedan okt. 2004392 inlägg
#9

Först öppnar du textfilen och lägger all data i en sträng (som i mitt exempel heter MyString) och sen kör du en split för att göra strängen till en array.

MyArray = split(MyString,";")

För att skriva ut allt gör du så här:

For Each Item In MyArray
  Response.Write Item
Next
Medlem sedan juli 20041 183 inlägg
#10

Precis så som jag menade. Ett litet tips bara om man vill följa standarder så är det vanligt att skriva vad det är för en variabel före variabelnamnet, ex:

arrMyArray
strItem

arr = en array variabel
str = en sträng variabel

258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)