Importation multiligne requête SQL à chaîne unique
Dans R, comment puis-je importer le contenu d'un texte multiligne fichier (contenant SQL) à une seule chaîne de caractères?
L'sql.txt fichier ressemble à ceci:
SELECT TOP 100
setpoint,
tph
FROM rates
J'ai besoin d'importer ce fichier texte dans un R chaîne telle qu'il ressemble à ceci:
> sqlString
[1] "SELECT TOP 100 setpoint, tph FROM rates"
C'est pour que je puisse le nourrir à la RODBC comme ce
> library(RODBC)
> myconn<-odbcConnect("RPM")
> results<-sqlQuery(myconn,sqlString)
J'ai essayé de la readLines commande comme suit, mais il ne donne pas le format de chaîne de caractères qui RODBC besoins.
> filecon<-file("sql.txt","r")
> sqlString<-readLines(filecon, warn=FALSE)
> sqlString
[1] "SELECT TOP 100 " "\t[Reclaim Setpoint Mean (tph)] as setpoint, "
[3] "\t[Reclaim Rate Mean (tph)] as tphmean " "FROM [Dampier_RC1P].[dbo].[Rates]"
>
OriginalL'auteur Tommy O'Dell | 2010-01-05
Vous devez vous connecter pour publier un commentaire.
Le polyvalent
paste()
commande peut le faire avec l'argumentcollapse=""
:Bien que j'ai copié n'avait pas les onglets, en tout cas, l'analyseur SQL sera probablement ignorer les onglets de toute façon et vous avez trouvé l'
gsub()
-- tout bon.Ce sera susceptible de boucher votre requête si vous avez des
--
commentaires, n'est-ce pas? Je voudrais utiliserpaste(readLines('pathto/query.sql'), collapse = "\n")
La suppression des tabulations pourrait briser la requête SQL, comme un onglet peut-être les seuls espaces entre les termes. Mieux de les laisser dans, la base de données, il suffit de les ignorer, de toute façon.
OriginalL'auteur Dirk Eddelbuettel
Ci-dessous est une fonction R qui se lit en une multiligne requête SQL (à partir d'un fichier texte) et la convertit en une seule ligne de chaîne. La fonction supprime la mise en forme et de commentaires en ligne.
Pour l'utiliser, exécutez le code pour définir les fonctions, et votre seule ligne de chaîne sera le résultat de l'exécution
ONELINEQ("querytextfile.sql","~/chemin/vers/thefile").
Comment cela fonctionne: commentaires en ligne détail; il lit chaque ligne de la requête et supprime (remplace par rien) quelle qu'en soit n'est pas nécessaire d'écrire une seule ligne de la version de la requête (comme demandé dans la question). Le résultat est une liste de lignes, dont certaines sont vides et sont filtrés; la dernière étape consiste à coller ce (non) la liste et le retour de la seule ligne.
#
OriginalL'auteur cbymar
Voici la version finale de ce que je suis en utilisant. Merci Dirk.
OriginalL'auteur Tommy O'Dell
C'est ce que j'utilise:
OriginalL'auteur Sambodhi
essayer
paste(sqlString, collapse=" ")
OriginalL'auteur Aidan Cully
Il est possible d'utiliser
readChar()
au lieu dereadLines()
. J'ai eu un problème en cours avec un mélange de commentaires (--
ou/* */
) et cela a toujours bien fonctionné pour moi.OriginalL'auteur Rob
- Je utiliser
sql <- gsub("\n","",sql)
etsql <- gsub("\t","",sql)
ensemble.OriginalL'auteur MW Frost